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 version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dp" android:minHeight="72dp" android:updatePeriodMillis="86400000" android:initialLayout="@layout/example_appwidget_info"> </appwidget-provider>
在/res/layout中新建一个example_widget.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="firstWidgetText" android:background="#000000" android:id="@+id/widgetTextId" android:layout_width="fill_parent" android:layout_height="wrap_content"></TextView> <Button android:layout_width="match_parent" android:id="@+id/button1" android:text="Button" android:layout_height="wrap_content"></Button> </LinearLayout>
main.xml的内容不变
ExampleAppWidgetProvider.java内容
package com.cn; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.widget.RemoteViews; public class ExampleAppWidgetProvider extends AppWidgetProvider { @Override public void onDeleted(Context context, int[] appWidgetIds) { System.out.println("onDeleted"); super.onDeleted(context, appWidgetIds); } @Override public void onDisabled(Context context) { System.out.println("onDisabled"); super.onDisabled(context); } @Override public void onEnabled(Context context) { System.out.println("onEnabled"); super.onEnabled(context); } @Override public void onReceive(Context context, Intent intent) { System.out.println("onReceive"); super.onReceive(context, intent); } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { System.out.println("onUpdate"); for (int i = 0; i < appWidgetIds.length; i++) { System.out.println(appWidgetIds[i]); //创建一个intent对象 Intent intent = new Intent(context,TargetActivity.class); //创建一个PendingIntent PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0); RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.example_widget); //第一个参数用来指定绑定事件的id //第二个参数指定事件发生时, 哪个pendingIntent会被执行 remoteViews.setOnClickPendingIntent(R.id.button1, pending); //第一个参数是更新哪个appwidget的id //第二个是传remoteView appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews); } super.onUpdate(context, appWidgetManager, appWidgetIds); } }
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.cn" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="10" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Appwidget2Activity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="ExampleAppWidgetProvider"> <!-- 指定广播接收 --> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action> </intent-filter> <!-- appwidget的源文件 --> <meta-data android:name="android.appwidget.provider" android:resource="@xml/example_appwidget_info"></meta-data> </receiver> <activity android:name="TargetActivity"></activity> </application> </manifest>
TargetActivity.java内容
创建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 version="1.0" encoding="utf-8"?>
- <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
- android:minWidth="294dp" android:minHeight="72dp"
- android:updatePeriodMillis="86400000" android:initialLayout="@layout/example_appwidget_info">
- </appwidget-provider>
在/res/layout中新建一个example_widget.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical" android:layout_width="match_parent"
- android:layout_height="match_parent">
- <TextView android:text="firstWidgetText" android:background="#000000"
- android:id="@+id/widgetTextId" android:layout_width="fill_parent"
- android:layout_height="wrap_content"></TextView>
- <Button android:layout_width="match_parent" android:id="@+id/button1" android:text="Button" android:layout_height="wrap_content"></Button>
- </LinearLayout>
main.xml的内容不变
ExampleAppWidgetProvider.java内容
- package com.cn;
- import android.app.PendingIntent;
- import android.appwidget.AppWidgetManager;
- import android.appwidget.AppWidgetProvider;
- import android.content.Context;
- import android.content.Intent;
- import android.widget.RemoteViews;
- public class ExampleAppWidgetProvider extends AppWidgetProvider {
- @Override
- public void onDeleted(Context context, int[] appWidgetIds) {
- System.out.println("onDeleted");
- super.onDeleted(context, appWidgetIds);
- }
- @Override
- public void onDisabled(Context context) {
- System.out.println("onDisabled");
- super.onDisabled(context);
- }
- @Override
- public void onEnabled(Context context) {
- System.out.println("onEnabled");
- super.onEnabled(context);
- }
- @Override
- public void onReceive(Context context, Intent intent) {
- System.out.println("onReceive");
- super.onReceive(context, intent);
- }
- @Override
- public void onUpdate(Context context, AppWidgetManager appWidgetManager,
- int[] appWidgetIds) {
- System.out.println("onUpdate");
- for (int i = 0; i < appWidgetIds.length; i++) {
- System.out.println(appWidgetIds[i]);
- //创建一个intent对象
- Intent intent = new Intent(context,TargetActivity.class);
- //创建一个PendingIntent
- PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0);
- RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.example_widget);
- //第一个参数用来指定绑定事件的id
- //第二个参数指定事件发生时, 哪个pendingIntent会被执行
- remoteViews.setOnClickPendingIntent(R.id.button1, pending);
- //第一个参数是更新哪个appwidget的id
- //第二个是传remoteView
- appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
- }
- super.onUpdate(context, appWidgetManager, appWidgetIds);
- }
- }
AndroidManifest.xml
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.cn"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-sdk android:minSdkVersion="10" />
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".Appwidget2Activity"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <receiver android:name="ExampleAppWidgetProvider">
- <!-- 指定广播接收 -->
- <intent-filter>
- <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action>
- </intent-filter>
- <!-- appwidget的源文件 -->
- <meta-data android:name="android.appwidget.provider" android:resource="@xml/example_appwidget_info"></meta-data>
- </receiver>
- <activity android:name="TargetActivity"></activity>
- </application>
- </manifest>
TargetActivity.java内容
- package com.cn;
- import android.app.Activity;
- import android.os.Bundle;
- public class TargetActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- }
- }