Android编程之桌面小部件AppWidgetProvider用法示例

Android编程之桌面小部件AppWidgetProvider用法示例,第1张

概述本文实例讲述了Android编程桌面小部件AppWidgetProvider用法。分享给大家供大家参考,具体如下:

本文实例讲述了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用法示例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1144780.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存