`

AppWidgetProvider显示电量

 
阅读更多

添加权限

 

<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)是一项常见的任务,这可以帮助用户直观地查看设备的当前电量状态,无需解锁手机。这个"android 显示电量widget"项目就是这样一个实用工具,它允许用户将电量...

    Android源码——电量显示Widgets插件源码.zip

    在源码中,你会看到类似`res/layout/widget_layout.xml`这样的文件,这是Widgets的布局文件,里面可能包含了一个TextView来显示电量百分比,或者一个ImageView来展示电池图标。 电量的获取通常需要使用...

    Android 电量显示Widgets插件源码.rar

    电量显示Widget需要开发者对Android的Widget API有深入的理解,包括`AppWidgetProvider`、`RemoteViews`和`BroadcastReceiver`等类的使用。 1. **AppWidgetProvider**: 这是Android Widget的核心组件,继承自`...

    安卓Android源码——电量显示Widgets插件实现.zip

    4. **UI设计**: 使用`res/layout`目录下的XML布局文件来定义Widgets的界面元素,如TextView用于显示电量百分比,ImageView可能用于显示电池图标。UI设计需考虑不同屏幕尺寸和密度的适配。 5. **电源管理API**: 要...

    Android代码-电量显示Widgets插件源码.zip

    "电量显示Widgets插件源码.zip"显然包含了创建一个用于显示设备电量信息的Android小部件的源代码。接下来,我们将深入探讨这个主题,了解如何开发此类Widgets以及相关的Android开发知识。 首先,让我们了解一下...

    Android 电量显示Widgets

    在Android平台上,电量显示Widgets是用户界面中一种实用的小部件,它们可以实时地展示设备的当前电量状态。本文将深入探讨如何开发一个Android电量显示Widget,包括必要的技术知识点和源码解析。 首先,我们需要...

    精典源码之 电量显示Widgets插件实现.rar

    "精典源码之 电量显示Widgets插件实现.rar" 这个标题揭示了我们讨论的主题是关于一个电量显示的Widgets插件的源码。Widgets是Android系统中的一种小型应用程序,可以在主屏幕上提供即时信息或功能,如天气、时钟或...

    Android电量显示Widgets插件源码.zip

    "Android电量显示Widgets插件源码"是一个专为Android系统设计的电量指示器Widget的源代码包。这个源码可以帮助开发者了解如何创建自定义的桌面Widget,特别是如何实时显示设备的电池状态。 一、Android Widget基础...

    安卓Android源码——电量显示Widgets插件源码.zip

    在安卓平台上,开发一款电量显示Widgets插件涉及到多个关键知识点,包括Android SDK的使用、Widget组件的实现、电源管理API的交互以及UI设计等。以下将详细解释这些方面。 首先,Android SDK是开发者构建Android...

    Android 电量显示Widgets插件源码.zip

    在创建电量显示Widget时,我们需要定义一个XML布局文件来描述小部件的外观,通常包括一个ImageView用于显示电池图标和TextView用于显示电量百分比。 接下来,我们关注源码中的关键部分: 1. **AppWidgetProvider的...

    Android应用源码之 电量显示Widgets插件实现.zip

    源码中会包含一个或多个XML文件,这些文件定义了Widget的UI结构,如TextView用于显示电量,ImageView可能用于显示电池图标等。使用RemoteViews来加载和操作这些布局。 4. **RemoteViews**: RemoteViews是Android...

    Android程序研发源码Android 电量显示Widgets插件源码.zip

    在Android平台上,开发一款电量显示Widgets插件涉及到多个关键知识点,包括Android系统架构、Widget API、电量监控机制、UI设计以及性能优化等。下面将详细阐述这些内容。 1. **Android系统架构**: Android系统由...

    安卓开发-Android 电量显示Widgets插件实现.zip.zip

    这个布局文件通常包含TextView,用于显示电量百分比,以及可能的图标来表示电量状态(如充电、正常、低电)。 3. **编写AppWidgetProvider**: 创建一个新的Java类,继承自AppWidgetProvider,并重写其onUpdate()...

    Android 电量显示Widgets插件源码.zip源码资源下载

    开发者需要合理使用这些API,确保准确无误地显示电量数据。 4. **Java编程**: 作为主要的开发语言,Java用于编写Widget的逻辑代码,包括BroadcastReceiver的实现、数据处理和Widget更新逻辑。良好的面向对象设计...

    Android应用源码之 电量显示Widgets插件实现-IT计算机-毕业设计.zip

    当BroadcastReceiver接收到电池状态变化的广播后,会触发AppWidgetProvider的onUpdate()方法,更新Widget显示的电量信息。 6. **RemoteViews**: RemoteViews类用于表示在Widget上显示的内容,它可以操作Widget布局...

Global site tag (gtag.js) - Google Analytics