添加权限
<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 AppWidgetProvider例程(MP3播放)
android 桌面组件 App widget的使用.
android2.1下 用httpclient拿取sgs.sgamer.com的新闻 用AppWidgetProvider展示 定时刷新 Notification 点击浏览
本篇文章小编为大家介绍,基于Android AppWidgetProvider的使用。需要的朋友参考下
AppWidgetProvider是Android中提供的用于实现桌面小工具的类,其本质是一个广播,即BroadcastReceiver,在实际的使用中,把AppWidgetProvider当成一个BroadcastReceiver即可 1. 为AppWidget提供一个文件定义小控件的...
此例是我看Mars老师视频,写的一个例子。上传上去,是为了记录一下
基于Android系统的AppWidgetProvider分析.pdf
本文实例讲述了Android编程之桌面小部件AppWidgetProvider用法。分享给大家供大家参考,具体如下: /** * 桌面小部件 AppWidget配置 * * @description: * @author ldm * @date 2016-5-16 下午1:57:16 */ ...
android最简单的日历widget显示 没有Activity,只有widget,主要是继承AppWidgetProvider; 布局是layout布局和xml布局结合 在AndroidManifext.xml中注册 中为xml文件下文件名称。
这种应用程序的特点是它上面显示的内容能够根据系统内部的数据进行更新,不需要我们进入到程序的内部去,比如说闹钟指针的摆动等。本节内容就简单的介绍下实现这种功能所用到的appwidget技术,通过3个例子由浅入深来...
Android 运用AppWidgetProvider 和 Service 实现在生成桌面小空间实时显示刷新时间。
完整的Android工程源码,使用WidgetConfig,防止了在Widget添加Application时出现的重复添加问题。
Android appWidget 每日一句 修正网络获取
自己改的一个App Widget通过service和定时器实现定时更新的源码,自己改的一个App Widget通过service和定时器实现定时更新的源码,自己改的一个App Widget通过service和定时器实现定时更新的源码
桌面小部件使用案例,实现AppWidgets主要功能类AppWidgetProvider生命周期解析 AppWidgetProvider生命周期 1、在桌面上添加小部件,让小部件可用会调用:onEnabled 2、作为通知会调用onReceive 3、小部件可用后会...
窗口小部件的例子 AppWidgetProvider