添加权限
<uses-permission android:name="android.permission.BATTERY_STATS"></uses-permission>
public class BatteryWidget extends AppWidgetProvider {
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
Intent intent = new Intent(context, AppBatteryService.class);
context.startService(intent);// 不是context.startActivity(intent);
}
/* UpdateService系统服务后台运行 */
public static class AppBatteryService extends Service {//不要忘记static 否则会抛出Unable to instantiate service异常
private UpdateReceiver receiver;
public IBinder onBind(Intent arg0) {
return null;
}
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
IntentFilter filter = new IntentFilter(
Intent.ACTION_BATTERY_CHANGED);
receiver = new UpdateReceiver();
registerReceiver(receiver, filter);
RemoteViews updateViews = getRemoteViews(this);
/* 建立ComponentName对象与AppWidgetManager对象 */
ComponentName thisWidget = new ComponentName(this,
BatteryWidget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this);
manager.updateAppWidget(thisWidget, updateViews);
}
public void onDestroy() {
unregisterReceiver(receiver);
super.onDestroy();
}
public RemoteViews getRemoteViews(Context context) {
RemoteViews retRemoteViews = null;
retRemoteViews = new RemoteViews(context.getPackageName(),
R.layout.update_widget);
/* 取得保存在SharedPreferences的电量值 */
int power = 0;
SharedPreferences pres = context.getSharedPreferences("battery",
Context.MODE_PRIVATE);
if (pres != null) {
power = pres.getInt("power", 0);
}
/* 更新电量文字显示 */
retRemoteViews.setTextViewText(R.id.myTextView1, power + "%");
/* 更新电量图形显示 */
if (power != 0) {
Bitmap bmp = BitmapFactory.decodeResource(
context.getResources(), R.drawable.power);
float x = 57.0f / 100 * power;
Matrix matrix = new Matrix();
matrix.postScale(x, 1.0f);
Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, 1, 39,
matrix, true);
retRemoteViews.setBitmap(R.id.myImageView1,
"setImageBitmap", resizeBmp);
}
return retRemoteViews;
}
public class UpdateReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals
(Intent.ACTION_BATTERY_CHANGED)) {
int intLevel = intent.getIntExtra("level", 0);
int intScale = intent.getIntExtra("scale", 100);
/* 将电量保存在SharedPreferences中 */
SharedPreferences pres =
context.getSharedPreferences("battery",
Context.MODE_PRIVATE);
if (pres != null) {
SharedPreferences.Editor ed = pres.edit();
ed.putInt("power", (intLevel * 100 /
intScale));
ed.commit();
}
}
}
}
}
}
manifest.xml
<receiver
android:name=".BatteryWidget"
android:label="@string/app_name">
<intent-filter>
<action
android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_template" />
</receiver>
<service
android:name=".BatteryWidget$AppBatteryService" />
widget_template.xml
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="72dip"
android:minHeight="72dip"
android:updatePeriodMillis="10000"
android:initialLayout="@layout/update_widget"
/>
update_widget.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@drawable/batt"
android:orientation="vertical"
android:layout_width="72dip"
android:layout_height="72dip">
<ImageView
android:id="@+id/myImageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="5dip"
android:layout_marginTop="6dip" />
<TextView
android:id="@+id/myTextView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_x="24px"
android:layout_y="22px"
android:layout_marginTop="44dip"
android:gravity="center_horizontal" />
</RelativeLayout>
power.png
batt.png
- 大小: 205.2 KB
- 大小: 2.9 KB
- 大小: 2.1 KB
分享到:
相关推荐
在Android平台上,开发一个显示电量的小部件(Widget)是一项常见的任务,这可以帮助用户直观地查看设备的当前电量状态,无需解锁手机。这个"android 显示电量widget"项目就是这样一个实用工具,它允许用户将电量...
在源码中,你会看到类似`res/layout/widget_layout.xml`这样的文件,这是Widgets的布局文件,里面可能包含了一个TextView来显示电量百分比,或者一个ImageView来展示电池图标。 电量的获取通常需要使用...
电量显示Widget需要开发者对Android的Widget API有深入的理解,包括`AppWidgetProvider`、`RemoteViews`和`BroadcastReceiver`等类的使用。 1. **AppWidgetProvider**: 这是Android Widget的核心组件,继承自`...
4. **UI设计**: 使用`res/layout`目录下的XML布局文件来定义Widgets的界面元素,如TextView用于显示电量百分比,ImageView可能用于显示电池图标。UI设计需考虑不同屏幕尺寸和密度的适配。 5. **电源管理API**: 要...
"电量显示Widgets插件源码.zip"显然包含了创建一个用于显示设备电量信息的Android小部件的源代码。接下来,我们将深入探讨这个主题,了解如何开发此类Widgets以及相关的Android开发知识。 首先,让我们了解一下...
在Android平台上,电量显示Widgets是用户界面中一种实用的小部件,它们可以实时地展示设备的当前电量状态。本文将深入探讨如何开发一个Android电量显示Widget,包括必要的技术知识点和源码解析。 首先,我们需要...
"精典源码之 电量显示Widgets插件实现.rar" 这个标题揭示了我们讨论的主题是关于一个电量显示的Widgets插件的源码。Widgets是Android系统中的一种小型应用程序,可以在主屏幕上提供即时信息或功能,如天气、时钟或...
"Android电量显示Widgets插件源码"是一个专为Android系统设计的电量指示器Widget的源代码包。这个源码可以帮助开发者了解如何创建自定义的桌面Widget,特别是如何实时显示设备的电池状态。 一、Android Widget基础...
在安卓平台上,开发一款电量显示Widgets插件涉及到多个关键知识点,包括Android SDK的使用、Widget组件的实现、电源管理API的交互以及UI设计等。以下将详细解释这些方面。 首先,Android SDK是开发者构建Android...
在创建电量显示Widget时,我们需要定义一个XML布局文件来描述小部件的外观,通常包括一个ImageView用于显示电池图标和TextView用于显示电量百分比。 接下来,我们关注源码中的关键部分: 1. **AppWidgetProvider的...
源码中会包含一个或多个XML文件,这些文件定义了Widget的UI结构,如TextView用于显示电量,ImageView可能用于显示电池图标等。使用RemoteViews来加载和操作这些布局。 4. **RemoteViews**: RemoteViews是Android...
在Android平台上,开发一款电量显示Widgets插件涉及到多个关键知识点,包括Android系统架构、Widget API、电量监控机制、UI设计以及性能优化等。下面将详细阐述这些内容。 1. **Android系统架构**: Android系统由...
这个布局文件通常包含TextView,用于显示电量百分比,以及可能的图标来表示电量状态(如充电、正常、低电)。 3. **编写AppWidgetProvider**: 创建一个新的Java类,继承自AppWidgetProvider,并重写其onUpdate()...
开发者需要合理使用这些API,确保准确无误地显示电量数据。 4. **Java编程**: 作为主要的开发语言,Java用于编写Widget的逻辑代码,包括BroadcastReceiver的实现、数据处理和Widget更新逻辑。良好的面向对象设计...
当BroadcastReceiver接收到电池状态变化的广播后,会触发AppWidgetProvider的onUpdate()方法,更新Widget显示的电量信息。 6. **RemoteViews**: RemoteViews类用于表示在Widget上显示的内容,它可以操作Widget布局...