PendingIntent是指把Intent包装了一层, 并且把PendingIntent放入一个新的进程. 通过触发事件去触发这个PendingIntent.

创建PendingIntent方法.
1. getActivity(Context context, int requestCode, Intent intent, int flags)

2. getBroadcast(Context context, int requestCode, Intent intent, int flags)

3. getService(Context context, int requestCode, Intent intent, int flags)

例子:
在/res/xml中新建一个example_appwidget.xml

Xml代码  Widget中PendingIntent和RemoteViews用法
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:minWidth="294dp" android:minHeight="72dp"  
  4.     android:updatePeriodMillis="86400000" android:initialLayout="@layout/example_appwidget_info">  
  5.   
  6. </appwidget-provider>  



在/res/layout中新建一个example_widget.xml

Xml代码  Widget中PendingIntent和RemoteViews用法
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical" android:layout_width="match_parent"  
  4.     android:layout_height="match_parent">  
  5.     <TextView android:text="firstWidgetText" android:background="#000000"  
  6.         android:id="@+id/widgetTextId" android:layout_width="fill_parent"  
  7.         android:layout_height="wrap_content"></TextView>  
  8.     <Button android:layout_width="match_parent" android:id="@+id/button1" android:text="Button" android:layout_height="wrap_content"></Button>  
  9.   
  10. </LinearLayout>  



main.xml的内容不变

ExampleAppWidgetProvider.java内容

Java代码  Widget中PendingIntent和RemoteViews用法
  1. package com.cn;  
  2.   
  3. import android.app.PendingIntent;  
  4. import android.appwidget.AppWidgetManager;  
  5. import android.appwidget.AppWidgetProvider;  
  6. import android.content.Context;  
  7. import android.content.Intent;  
  8. import android.widget.RemoteViews;  
  9.   
  10. public class ExampleAppWidgetProvider extends AppWidgetProvider {  
  11.   
  12.     @Override  
  13.     public void onDeleted(Context context, int[] appWidgetIds) {  
  14.         System.out.println("onDeleted");  
  15.         super.onDeleted(context, appWidgetIds);  
  16.     }  
  17.   
  18.     @Override  
  19.     public void onDisabled(Context context) {  
  20.         System.out.println("onDisabled");  
  21.         super.onDisabled(context);  
  22.     }  
  23.   
  24.     @Override  
  25.     public void onEnabled(Context context) {  
  26.         System.out.println("onEnabled");  
  27.         super.onEnabled(context);  
  28.     }  
  29.   
  30.     @Override  
  31.     public void onReceive(Context context, Intent intent) {  
  32.         System.out.println("onReceive");  
  33.         super.onReceive(context, intent);  
  34.     }  
  35.   
  36.     @Override  
  37.     public void onUpdate(Context context, AppWidgetManager appWidgetManager,  
  38.             int[] appWidgetIds) {  
  39.         System.out.println("onUpdate");  
  40.         for (int i = 0; i < appWidgetIds.length; i++) {  
  41.             System.out.println(appWidgetIds[i]);  
  42.             //创建一个intent对象  
  43.             Intent intent = new Intent(context,TargetActivity.class);  
  44.             //创建一个PendingIntent  
  45.             PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0);  
  46.             RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.example_widget);  
  47.             //第一个参数用来指定绑定事件的id  
  48.             //第二个参数指定事件发生时, 哪个pendingIntent会被执行  
  49.             remoteViews.setOnClickPendingIntent(R.id.button1, pending);  
  50.             //第一个参数是更新哪个appwidget的id  
  51.             //第二个是传remoteView  
  52.             appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);  
  53.         }  
  54.         super.onUpdate(context, appWidgetManager, appWidgetIds);  
  55.     }  
  56.   
  57. }  



AndroidManifest.xml

Xml代码  Widget中PendingIntent和RemoteViews用法
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="com.cn"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.     <uses-sdk android:minSdkVersion="10" />  
  7.   
  8.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  9.         <activity android:name=".Appwidget2Activity"  
  10.                   android:label="@string/app_name">  
  11.             <intent-filter>  
  12.                 <action android:name="android.intent.action.MAIN" />  
  13.                 <category android:name="android.intent.category.LAUNCHER" />  
  14.             </intent-filter>  
  15.         </activity>  
  16.         <receiver android:name="ExampleAppWidgetProvider">  
  17.             <!-- 指定广播接收 -->  
  18.             <intent-filter>  
  19.                 <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action>  
  20.             </intent-filter>  
  21.             <!-- appwidget的源文件 -->  
  22.             <meta-data android:name="android.appwidget.provider" android:resource="@xml/example_appwidget_info"></meta-data>  
  23.         </receiver>  
  24.         <activity android:name="TargetActivity"></activity>  
  25.     </application>  
  26. </manifest>  




TargetActivity.java内容

Java代码  Widget中PendingIntent和RemoteViews用法
    1. package com.cn;  
    2.   
    3. import android.app.Activity;  
    4. import android.os.Bundle;  
    5.   
    6. public class TargetActivity extends Activity {  
    7.   
    8.     @Override  
    9.     protected void onCreate(Bundle savedInstanceState) {  
    10.         super.onCreate(savedInstanceState);  
    11.         setContentView(R.layout.main);  
    12.     }  
    13.   

相关文章: