萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 安卓開發 >> Android Widget 電池插件的開發實現

Android Widget 電池插件的開發實現

   最近突發奇想,想自己編一個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.        
copyright © 萬盛學電腦網 all rights reserved