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 = new Intent(context,TargetActivity.class);
-
-
PendingIntent pending = PendingIntent.getActivity(context, 0, intent,
0);
-
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.example_widget);
-
-
- remoteViews.setOnClickPendingIntent(R.id.button1, pending);
-
-
-
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>
-
-
<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);
- }
- }
分享到:
相关推荐
最后,为了使Widget能在设置界面显示,需要在主Activity中调用AppWidgetManager的updateAppWidget()方法,传递Widget的ID和RemoteViews对象: ```java public class MainActivity extends AppCompatActivity { @...
本教程将详细介绍如何在Android项目中创建和使用一个简单的Widget。 1. **理解Android Widget** Android小部件是基于AppWidgetProvider类的,它是一个BroadcastReceiver的子类,负责处理小部件的更新、点击等事件...
3. **设置RemoteViews**:在`onUpdate()`方法中,使用`RemoteViews`对象实例化我们的布局,并通过`setRemoteAdapter()`方法将Adapter绑定到ListView。`setRemoteAdapter()`方法告诉系统远程服务如何获取列表数据。 ...
接下来,在`onUpdate()`方法中,你需要创建一个RemoteViews对象,它代表了Widget在主屏幕上的布局。通过RemoteViews,你可以设置Widget的各项属性,如文本、图像等。然后使用`appWidgetManager.updateAppWidget()`来...
在`onReceive`方法中,我们获取`appWidgetId`并更新对应的小部件。这通常涉及到使用`RemoteViews`对象来修改小部件的布局或数据。 在Android权限方面,由于BroadcastReceiver是在后台运行的,所以需要在...
在`onReceive()`方法中,我们可以检测到`appWidget`的意图(Intent)并根据需要启动`Activity`。 ```java public class AppWidgetReceiver extends BroadcastReceiver { @Override public void onReceive(Context...
使用XML布局文件来定义Widget的外观,通常使用`RemoteViews`类来设置布局和动态更新内容。布局可以包含各种视图元素,如TextView、ImageView和Button等。 3. **Widget配置信息** 在`appwidget-provider.xml`文件...
在`02_07_ppt.jpg`中,可能包含的是关于Widget设计和使用技巧的PPT,涵盖了如何优化用户体验、提高Widget的互动性和吸引力等内容。可能包括了设计原则、最佳实践以及一些高级特性,如Widget预览、Widget配置活动等。...
5. 更新Widget:使用AppWidgetManager和RemoteViews来更新Widget的内容。 6. 添加到主屏幕:用户可以通过长按主屏幕,选择添加Widget来将你的应用Widget添加到设备上。 四、Widget的优化技巧 1. 使用...
用户可以通过点击Widget来触发事件,这通常通过在`AppWidgetProvider`的`onReceive()`方法中处理ACTION_WIDGET_CLICK意图来实现。 7. **最佳实践** - 优化更新频率以减少电池消耗。 - 提供清晰的用户指南,解释...
4. **更新Widget内容**: 使用`RemoteViews`类来修改Widget的视图,通常在`onUpdate()`方法中执行。 ```java RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); views....
如果你的Widget显示的是新闻标题,可以定期通过后台服务发送一个更新广播,BroadcastReceiver接收到广播后,使用RemoteViews对象来修改Widget上的文本视图,然后调用AppWidgetManager的updateAppWidget()方法来刷新...
2. **设置更新间隔**: 在AndroidManifest.xml中,你可以使用`<appwidget-provider>`标签的`updatePeriodMillis`属性来设置Widget自动更新的频率。但请注意,由于Android系统的电源管理策略,实际更新间隔可能不会...
6. **实现更新逻辑**:在`onUpdate()`方法中,使用`RemoteViews`对象来操作Widget的视图,并通过`AppWidgetManager`更新Widget的内容。`RemoteViews`可以用来设置布局中的文本,例如设置TextClock的文本为当前时间。...
最后,你需要在`onUpdate()`方法中使用RemoteViews来填充并更新布局,同时创建一个PendingIntent来响应用户的交互: ```java @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager,...
我们通常在XML文件中定义这个信息,然后在AppWidgetProvider的onReceive方法中加载。 3. **RemoteViews**: 这是表示Widget视图的类,允许开发者操作远程进程中的View对象,这对于更新Widget内容非常有用。我们可以...
这通常涉及到对自定义View的使用,以及在onDraw()方法中实现绘图逻辑。 在描述中提到了一个博客链接,虽然具体内容没有给出,但我们可以根据常规的Android开发实践来解释这个主题。在Android中,Widget并不直接支持...
它首先获取当前的`AppWidgetManager`实例,然后使用`updateAppWidget()`方法更新Widget。 ### 3.3 关键变量解释 - `SUBJECT_MARK`: 表示学科标识符的字符串常量。 - `CHINESE_CONSTANT`: 用于表示中文科目的常量值...
在这个时钟Widget中,开发者会用RemoteViews来创建和更新显示时间的大字体时钟和日期信息。 4. **AlarmManager**: 可能用于定时更新Widget内容。因为Android系统为了节能,不会一直监控Widget的更新,所以开发者...
- Android系统会定期检查Widget状态,但为了确保时间的实时性,你可能需要在服务或BroadcastReceiver中手动调用`AppWidgetManager.updateAppWidget()`方法来强制更新Widget。 9. **测试与优化**: - 使用Android...