您现在的位置: 万盛学电脑网 >> 程序编程 >> 网络编程 >> 安卓开发 >> 正文

Android Widget 电池插件的开发实现

作者:佚名    责任编辑:admin    更新时间:2022-06-22

   最近突发奇想,想自己编一个Android电池插件放在桌面上,一是这个App确实有它的实用价值,二是编起来工程量应该不是很大,不用花太长时间,三来又能学习下Widget的开发方法,一举三得,于是,暂停下游戏开发的学习,来编一个widget先。


    在查找并结合多方资料后终于实现,效果图如下:
长按桌面空白处,出现菜单,点击Widgets,此时的插件已经装入:

 Android Widget 电池插件的开发实现 三联教程

在电源连接时,机器人周围会星光闪闪,表明正在充电,不在充电时,周围的星光会消失。

机器人身上显示电池电量百分比。


单击机器人图标,会跳出电池信息的详情,再次单击屏幕关闭详情信息。

下面介绍代码的实现:

整个工程主要实现两个部分,一个是AppWidget部分,实现桌面Widget的显示,更新等,另一个部分就是点击widget后出现的显示电池详细信息的Activity的实现了。


首先是AppWidget部分,上代码,NewBatteryWidget.java部分:

view plain
  1. package com.ritterliu.newBatteryWidget;  
  2.   
  3. import android.app.AlarmManager;  
  4. import android.app.PendingIntent;  
  5. import android.app.Service;  
  6. import android.appwidget.AppWidgetManager;  
  7. import android.appwidget.AppWidgetProvider;  
  8. import android.content.BroadcastReceiver;  
  9. import android.content.ComponentName;  
  10. import android.content.Context;  
  11. import android.content.Intent;  
  12. import android.content.IntentFilter;  
  13. import android.graphics.Bitmap;  
  14. import android.graphics.BitmapFactory;  
  15. import android.os.IBinder;  
  16. import android.widget.RemoteViews;  
  17.   
  18. public class NewBatteryWidget extends AppWidgetProvider{      
  19.     private static int currentBatteryLevel;  
  20.     private static int currentBatteryStatus;  
  21.   
  22.     public void onUpdate(Context context,AppWidgetManager appWidgetManager,int[] appWidgetIds)  
  23.     {  
  24.         super.onUpdate(context, appWidgetManager, appWidgetIds);  
  25.       
  26.         /** 启动自动更新电池信息的service */  
  27.         context.startService(new Intent(context,updateService.class));  
  28.       
  29.         /** 为AppWidget设置点击事件的响应,启动显示电池信息详情的activity */   
  30.         Intent startActivityIntent = new Intent(context,NewBatteryInfoActivity.class);  
  31.         PendingIntent Pintent = PendingIntent.getActivity(context,0,startActivityIntent,0);  
  32.         RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.newrelativelayout);  
  33.         views.setOnClickPendingIntent(R.id.imageView,Pintent);  
  34.         appWidgetManager.updateAppWidget(appWidgetIds,views);  
  35.               
  36.     }  
  37.       
  38.     /** 自动更新电池信息的service,通过AlarmManager实现定时不间断地发送电池信息 */  
  39.     public static class updateService extends Service{  
  40.         Bitmap bmp;     //定义机器人图片  
  41.         @Override  
  42.         public IBinder onBind(Intent intent) {  
  43.             // TODO Auto-generated method stub  
  44.             return null;  
  45.         }  
  46.           
  47.         /** 定义一个接收电池信息的broascastReceiver */  
  48.         private BroadcastReceiver batteryReceiver=new BroadcastReceiver()  
  49.         {  
  50.             @Override  
  51.             public void onReceive(Context context, Intent intent) {  
  52.                 // TODO Auto-generated method stub  
  53.                 currentBatteryLevel=intent.getIntExtra("level", 0);  
  54.                 currentBatteryStatus=intent.getIntExtra("status", 0);  
  55.             }  
  56.               
  57.