android开发之Widget AppWidgetProvider 桌面短信
来源:互联网 发布:淘宝有香烟黑鬼买吗 编辑:程序博客网 时间:2024/05/20 03:04
今天学习了AppWidgetProvider 这个东西,很好耍,和大家分享一下,它主要用于开发桌面程序,可以看看。
下面讲下怎样实现:
1,编写一个类继承AppWidgetProvider 类
AppWidgetProvider 类继承了BroadcastRecevier类,可以复写onUpdate、onReceive、onEnabled、onDisabled、onDeleted方法,其中这红色两个方法最为常用,onReceive方法就是接收广播的方法。
其中还有很重要的类是:
AppWidgetManager:负责管理 AppWidget ,向 AppwidgetProvider 发送通知,它有哪些方法这里就不在叙述了。
RemoteViews :一个可以在其他应用进程中运行的类,向 AppWidgetProvider 发送通知。
2,配置AndroidManifest.xml
在<receiver>里注册一下,这个几乎不的变的
<meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_provider" />
当然你要用到广播接收方法的话还必须在同一个receiver中注册广播
<intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action> </intent-filter> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter>
3,建立文件res/xml,放widget_provider.xml
这个主要是指定该程序的大小,样式等。
<?xml version="1.0" encoding="utf-8"?><appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"android:minWidth="294dp" android:minHeight="100dp"android:updatePeriodMillis="10000" android:initialLayout="@layout/main" /> <!-- android:initialLayout="@layout/main"此句为指定桌面组件的布局文件。 -->
4,剩下就简单了,写个布局文件配置程序里面的结构。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="wrap_content" android:background="@drawable/bg"><TextView android:id="@+id/sender" android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="@string/sender"android:textSize="12px" android:textColor="#7779e5" /><TextView android:id="@+id/msg" android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="@string/msg"android:textSize="12px" /><TextView android:id="@+id/time" android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="@string/time"android:textSize="12px" /></LinearLayout>
下面就看看是怎么实现短信在桌面实现的:直接上代码。
AppWidgetProvider 类
import java.text.SimpleDateFormat;import java.util.Date;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.telephony.SmsMessage;import android.widget.RemoteViews;public class TextWidget extends AppWidgetProvider {public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";RemoteViews remoteviews;// 每次更新都调用一次该方法@Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {super.onUpdate(context, appWidgetManager, appWidgetIds);}// 每删除一个就调用一次@Overridepublic void onDeleted(Context context, int[] appWidgetIds) {super.onDeleted(context, appWidgetIds);}// 当最后一个该Widget删除时调用该方法@Overridepublic void onDisabled(Context context) {super.onDisabled(context);}// 当Widget第一次被添加到桌面时调用该方法,可添加多次但只是第一次调用@Overridepublic void onEnabled(Context context) {super.onEnabled(context);}// 每接收一次广播消息就调用@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals(SMS_RECEIVED_ACTION)) {Bundle bundle = intent.getExtras();Object[] pdus = (Object[]) bundle.get("pdus");for (Object pdu : pdus) {SmsMessage message = SmsMessage.createFromPdu((byte[]) pdu);String sender = message.getOriginatingAddress();String content = message.getMessageBody();Date date = new Date(message.getTimestampMillis());SimpleDateFormat farmat = new SimpleDateFormat();String time = farmat.format(date);if (remoteviews == null) {remoteviews = new RemoteViews(context.getPackageName(),R.layout.main);}remoteviews.setTextViewText(R.id.sender, sender);remoteviews.setTextViewText(R.id.msg, content+"\n");remoteviews.setTextViewText(R.id.time, "接收时间"+time);AppWidgetManager appWidgetManger = AppWidgetManager.getInstance(context);int[] appIds = appWidgetManger.getAppWidgetIds(new ComponentName(context,TextWidget.class));appWidgetManger.updateAppWidget(appIds, remoteviews);}}super.onReceive(context, intent);}}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.apps" android:versionCode="1" android:versionName="1.0"><application android:icon="@drawable/icon" android:label="@string/app_name"><receiver android:name=".TextWidget" android:label="@string/app_name"> <!-- 这个是接收广播时的过滤器 Android定义的 --> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action> </intent-filter> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> <meta-data android:name="android.appwidget.provider"android:resource="@xml/widget_provider" /></receiver></application><uses-permission android:name="android.permission.RECEIVE_SMS"/></manifest>
总结:其实桌面程序也不难,主要就是AppWidgetProvider、AppWidgetManager和RemoteViews三类的使用,方法也不多,就是配置麻烦了点,稍不注意就错了。希望对大家有帮助......
- android开发之Widget AppWidgetProvider 桌面短信
- android开发之Widget AppWidgetProvider
- Android的桌面组件App Widget的使用方法 AppWidgetProvider RemoteViews
- android AppWidgetProvider开发桌面小工具
- Android开发之Widget桌面时钟
- android 桌面widget开发
- Android widget 桌面组件开发
- Android widget 桌面组件开发
- Android widget 桌面组件开发
- Android widget 桌面组件开发
- Android之高仿墨迹天气桌面组件(AppWidgetProvider)
- Android之高仿墨迹天气桌面组件(AppWidgetProvider)
- Android之高仿墨迹天气桌面组件(AppWidgetProvider) .
- Android进阶之widget桌面
- Android基础之AppWidgetProvider
- Android之AppWidgetProvider
- Android基础之AppWidgetProvider
- Android基础之AppWidgetProvider
- flashbuilder使用竖条图表ColumnChart示例
- 兆鹏带你读watir——【第三篇】元素定位的过程
- asp.net创建mvc框架介绍
- 参考文献natbib的使用
- 算法导论 二叉查找树
- android开发之Widget AppWidgetProvider 桌面短信
- STM32串口采样与仪表步进电机控制程序(主程序与串口程序,需用正点原子定时器中断实验程序模板)
- C++虚函数
- Android面试题,你能作出多少?
- 图像的二维DFT及其反变换
- 今天被领导好好教训了一番~特别总结一下
- Installing Khelpcenter
- 最近的一点想法
- 计算机视觉