
本文实例讲述了AndroID编程之桌面小部件appwidgetprovider用法。分享给大家供大家参考,具体如下:
/** * 桌面小部件 AppWidget配置 * * @description: * @author ldm * @date 2016-5-16 下午1:57:16 */public class ExampleAppWidgetConfigure extends Activity { static final String TAG = "ExampleAppWidgetConfigure"; // 保存的文件名 private static final String PREFS_name = "com.example.androID.APIs.appWidget.Exampleappwidgetprovider"; // 保存的字段KEY private static final String PREF_PREFIX_KEY = "prefix_"; // 小部件 对应ID int mAppWidgetID = AppWidgetManager.INVALID_APPWidget_ID; // 输入框 EditText mAppWidgetPrefix; public ExampleAppWidgetConfigure() { super(); } @OverrIDe public voID onCreate(Bundle icicle) { super.onCreate(icicle); setResult(RESulT_CANCELED); // 设置布局 setContentVIEw(R.layout.appWidget_configure); mAppWidgetPrefix = (EditText) findVIEwByID(R.ID.appWidget_prefix); // 设置监听 findVIEwByID(R.ID.save_button).setonClickListener(mOnClickListener); // 获取intent传递过来的数据 Intent intent = getIntent(); Bundle extras = intent.getExtras(); if (extras != null) { mAppWidgetID = extras.getInt(AppWidgetManager.EXTRA_APPWidget_ID,AppWidgetManager.INVALID_APPWidget_ID); } if (mAppWidgetID == AppWidgetManager.INVALID_APPWidget_ID) { finish(); } mAppWidgetPrefix.setText(loadTitlePref(ExampleAppWidgetConfigure.this,mAppWidgetID)); } VIEw.OnClickListener mOnClickListener = new VIEw.OnClickListener() { public voID onClick(VIEw v) { final Context context = ExampleAppWidgetConfigure.this; String TitlePrefix = mAppWidgetPrefix.getText().toString(); //保存到SharedPreferences文件 saveTitlePref(context,mAppWidgetID,TitlePrefix); AppWidgetManager appWidgetManager = AppWidgetManager .getInstance(context); //更新小部件 Exampleappwidgetprovider.updateAppWidget(context,appWidgetManager,TitlePrefix); Intent resultValue = new Intent(); resultValue.putExtra(AppWidgetManager.EXTRA_APPWidget_ID,mAppWidgetID); setResult(RESulT_OK,resultValue); finish(); } }; static voID saveTitlePref(Context context,int appWidgetID,String text) { SharedPreferences.Editor prefs = context.getSharedPreferences( PREFS_name,0).edit(); prefs.putString(PREF_PREFIX_KEY + appWidgetID,text); prefs.commit(); } static String loadTitlePref(Context context,int appWidgetID) { SharedPreferences prefs = context.getSharedPreferences(PREFS_name,0); String prefix = prefs.getString(PREF_PREFIX_KEY + appWidgetID,null); if (prefix != null) { return prefix; } else { return context.getString(R.string.appWidget_prefix_default); } } static voID deleteTitlePref(Context context,int appWidgetID) { } static voID loadAllTitlePrefs(Context context,ArrayList<Integer> appWidgetIDs,ArrayList<String> texts) { }}<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:orIEntation="vertical" > <TextVIEw androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:text="This text will be shown before the date in our example Widget." /> <EditText androID:ID="@+ID/appWidget_prefix" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" /> <button androID:ID="@+ID/save_button" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="@androID:string/ok" /></linearLayout>
/** * appwidgetprovider小部件广播组件使用: * 1, 实现appwidgetprovider的子类,并至少overrIDe onUpdate()方法 * 2,在AndroIDManifest.xml中,声明上述的appwidgetprovider的子类是一个Receiver,并且: * 该Receiver的intent-filter的Action必须包含“androID.appWidget.action.APPWidget_UPDATE”; * 该Receiver的Meta-data为“androID.appWidget.provIDer”,并用一个xml文件来描述布局属性。 * 3, 在第2点中的xml文件中描述布局属性的节点名称必须为“appWidget-provIDer”。 * * @description: * @author ldm * @date 2016-5-16 下午1:43:31 */public class Exampleappwidgetprovider extends appwidgetprovider { // Log打印日志标签 private static final String TAG = "Exampleappwidgetprovider"; /** * onUpdate() 处理AppWidgetManager.ACTION_APPWidget_UPDATE广播。 * 该广播在需要appwidgetprovider提供RemoteVIEws数据时 * ,由AppWidgetService.sendUpdateIntentLocked()发出。 */ @OverrIDe public voID onUpdate(Context context,AppWidgetManager appWidgetManager,int[] appWidgetIDs) { Log.d(TAG,"onUpdate"); final int N = appWidgetIDs.length; for (int i = 0; i < N; i++) { //获取到ID int appWidgetID = appWidgetIDs[i]; //设置标题 String TitlePrefix = ExampleAppWidgetConfigure.loadTitlePref( context,appWidgetID); //更新AppWidget updateAppWidget(context,appWidgetID,TitlePrefix); } } /** * onDeleted() 处理AppWidgetManager.ACTION_APPWidget_DELETED广播。 * 该广播在有该appwidgetprovider的实例被删除时 * ,由AppWidgetService.deleteAppWidgetLocked()发出。 */ @OverrIDe public voID onDeleted(Context context,"onDeleted"); final int N = appWidgetIDs.length; for (int i = 0; i < N; i++) { ExampleAppWidgetConfigure.deleteTitlePref(context,appWidgetIDs[i]); } } /** * onEnabled() 处理AppWidgetManager.ACTION_APPWidget_ENABLED广播。 * 该广播在该appwidgetprovider被实例化时,由AppWidgetService.sendEnableIntentLocked()发出。 */ @OverrIDe public voID onEnabled(Context context) { Log.d(TAG,"onEnabled"); PackageManager pm = context.getPackageManager(); pm.setComponentEnabledSetting(new Componentname( "com.example.androID.APIs",".appWidget.ExamplebroadcastReceiver"),PackageManager.COMPONENT_ENABLED_STATE_ENABLED,PackageManager.DONT_KILL_APP); } /** * onDisabled() 处理AppWidgetManager.ACTION_APPWidget_Disabled广播。 * 该广播在该appwidgetprovider的所有实例中的最后一个实例被删除时 * ,由AppWidgetService.deleteAppWidgetLocked()发出。 */ @OverrIDe public voID onDisabled(Context context) { Log.d(TAG,"onDisabled"); PackageManager pm = context.getPackageManager(); //设置组件可用 pm.setComponentEnabledSetting(new Componentname( "com.example.androID.APIs",PackageManager.DONT_KILL_APP); } static voID updateAppWidget(Context context,String TitlePrefix) { Log.d(TAG,"updateAppWidget appWidgetID=" + appWidgetID + " TitlePrefix=" + TitlePrefix); CharSequence text = context.getString(R.string.appWidget_text_format,ExampleAppWidgetConfigure.loadTitlePref(context,appWidgetID),"0x" + Long.toHexString(SystemClock.elapsedRealtime())); // 创建RemoteVIEws 对象 RemoteVIEws vIEws = new RemoteVIEws(context.getPackagename(),R.layout.appWidget_provIDer); // 设置RemoteVIEws 对象的文本 vIEws.setTextVIEwText(R.ID.appWidget_text,text); // 告诉AppWidgetManager 显示 vIEws对象给Widget. appWidgetManager.updateAppWidget(appWidgetID,vIEws); }}小部件布局
<?xml version="1.0" enCoding="utf-8"?><TextVIEw xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:ID="@+ID/appWidget_text" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:background="#ffff00ff" androID:textcolor="#ff000000"/>
public class ExamplebroadcastReceiver extends broadcastReceiver { @OverrIDe public voID onReceive(Context context,Intent intent) { Log.d("ExmamplebroadcastReceiver","intent=" + intent); //获取广播的ACTION String action = intent.getAction(); //对ACTION进行判断 if (action.equals(Intent.ACTION_TIMEZONE_CHANGED) || action.equals(Intent.ACTION_TIME_CHANGED)) { AppWidgetManager gm = AppWidgetManager.getInstance(context); ArrayList<Integer> appWidgetIDs = new ArrayList<Integer>(); ArrayList<String> texts = new ArrayList<String>(); ExampleAppWidgetConfigure.loadAllTitlePrefs(context,appWidgetIDs,texts); final int N = appWidgetIDs.size(); for (int i=0; i<N; i++) { Exampleappwidgetprovider.updateAppWidget(context,gm,appWidgetIDs.get(i),texts.get(i)); } } }}在AndroIDManifest.xml中添加相应组件:
ExampleAppWidgetConfigure
<activity androID:name=".appWidget.ExampleAppWidgetConfigure" > <intent-filter> <action androID:name="androID.appWidget.action.APPWidget_CONfigURE" /> </intent-filter></activity>
Exampleappwidgetprovider
<receiver androID:name=".appWidget.Exampleappwidgetprovider" > <Meta-data androID:name="androID.appWidget.provIDer" androID:resource="@xml/appWidget_provIDer" /> <intent-filter> <action androID:name="androID.appWidget.action.APPWidget_UPDATE" /> </intent-filter></receiver>
ExamplebroadcastReceiver
<receiver androID:name=".appWidget.ExamplebroadcastReceiver" androID:enabled="false" > <intent-filter> <action androID:name="androID.intent.ACTION_TIMEZONE_CHANGED" /> <action androID:name="androID.intent.ACTION_TIME" /> </intent-filter></receiver>
开源代码:https://github.com/ldm520/ANDROID_API_DEMOS
更多关于AndroID相关内容感兴趣的读者可查看本站专题:《Android基本组件用法总结》、《Android开发入门与进阶教程》、《Android布局layout技巧总结》、《Android视图View技巧总结》、《Android编程之activity *** 作技巧总结》、《Android资源 *** 作技巧汇总》及《Android控件用法总结》
希望本文所述对大家AndroID程序设计有所帮助。
总结以上是内存溢出为你收集整理的Android编程之桌面小部件AppWidgetProvider用法示例全部内容,希望文章能够帮你解决Android编程之桌面小部件AppWidgetProvider用法示例所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)