`
rayln
  • 浏览: 433929 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Widget中PendingIntent和RemoteViews用法

 
阅读更多
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内容
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);
	}

}
分享到:
评论

相关推荐

    AndroidStudio简单实现单击Widget打开Activity

    最后,为了使Widget能在设置界面显示,需要在主Activity中调用AppWidgetManager的updateAppWidget()方法,传递Widget的ID和RemoteViews对象: ```java public class MainActivity extends AppCompatActivity { @...

    android widget简单使用方法

    本教程将详细介绍如何在Android项目中创建和使用一个简单的Widget。 1. **理解Android Widget** Android小部件是基于AppWidgetProvider类的,它是一个BroadcastReceiver的子类,负责处理小部件的更新、点击等事件...

    android AppWidget ListView

    3. **设置RemoteViews**:在`onUpdate()`方法中,使用`RemoteViews`对象实例化我们的布局,并通过`setRemoteAdapter()`方法将Adapter绑定到ListView。`setRemoteAdapter()`方法告诉系统远程服务如何获取列表数据。 ...

    widget跳转activity

    接下来,在`onUpdate()`方法中,你需要创建一个RemoteViews对象,它代表了Widget在主屏幕上的布局。通过RemoteViews,你可以设置Widget的各项属性,如文本、图像等。然后使用`appWidgetManager.updateAppWidget()`来...

    AppWidget的getBroadcast

    在`onReceive`方法中,我们获取`appWidgetId`并更新对应的小部件。这通常涉及到使用`RemoteViews`对象来修改小部件的布局或数据。 在Android权限方面,由于BroadcastReceiver是在后台运行的,所以需要在...

    appWidget启动Activity

    在`onReceive()`方法中,我们可以检测到`appWidget`的意图(Intent)并根据需要启动`Activity`。 ```java public class AppWidgetReceiver extends BroadcastReceiver { @Override public void onReceive(Context...

    安卓Widget小组件相关-WidgetTest.zip

    使用XML布局文件来定义Widget的外观,通常使用`RemoteViews`类来设置布局和动态更新内容。布局可以包含各种视图元素,如TextView、ImageView和Button等。 3. **Widget配置信息** 在`appwidget-provider.xml`文件...

    android widget

    在`02_07_ppt.jpg`中,可能包含的是关于Widget设计和使用技巧的PPT,涵盖了如何优化用户体验、提高Widget的互动性和吸引力等内容。可能包括了设计原则、最佳实践以及一些高级特性,如Widget预览、Widget配置活动等。...

    Android高级应用源码-android Widget小组件开发.rar

    5. 更新Widget:使用AppWidgetManager和RemoteViews来更新Widget的内容。 6. 添加到主屏幕:用户可以通过长按主屏幕,选择添加Widget来将你的应用Widget添加到设备上。 四、Widget的优化技巧 1. 使用...

    Android的桌面Widget的Demo

    用户可以通过点击Widget来触发事件,这通常通过在`AppWidgetProvider`的`onReceive()`方法中处理ACTION_WIDGET_CLICK意图来实现。 7. **最佳实践** - 优化更新频率以减少电池消耗。 - 提供清晰的用户指南,解释...

    Pro Android学习:widget小例子

    4. **更新Widget内容**: 使用`RemoteViews`类来修改Widget的视图,通常在`onUpdate()`方法中执行。 ```java RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); views....

    widget定时更新

    2. **设置更新间隔**: 在AndroidManifest.xml中,你可以使用`&lt;appwidget-provider&gt;`标签的`updatePeriodMillis`属性来设置Widget自动更新的频率。但请注意,由于Android系统的电源管理策略,实际更新间隔可能不会...

    android时钟widget例子

    6. **实现更新逻辑**:在`onUpdate()`方法中,使用`RemoteViews`对象来操作Widget的视图,并通过`AppWidgetManager`更新Widget的内容。`RemoteViews`可以用来设置布局中的文本,例如设置TextClock的文本为当前时间。...

    android app widget demo

    如果你的Widget显示的是新闻标题,可以定期通过后台服务发送一个更新广播,BroadcastReceiver接收到广播后,使用RemoteViews对象来修改Widget上的文本视图,然后调用AppWidgetManager的updateAppWidget()方法来刷新...

    android之appwidget(一)简单appwidget

    最后,你需要在`onUpdate()`方法中使用RemoteViews来填充并更新布局,同时创建一个PendingIntent来响应用户的交互: ```java @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager,...

    android widget源码

    我们通常在XML文件中定义这个信息,然后在AppWidgetProvider的onReceive方法中加载。 3. **RemoteViews**: 这是表示Widget视图的类,允许开发者操作远程进程中的View对象,这对于更新Widget内容非常有用。我们可以...

    draw a line in a Widget

    这通常涉及到对自定义View的使用,以及在onDraw()方法中实现绘图逻辑。 在描述中提到了一个博客链接,虽然具体内容没有给出,但我们可以根据常规的Android开发实践来解释这个主题。在Android中,Widget并不直接支持...

    Android Widget开发代码示例详细说明

    它首先获取当前的`AppWidgetManager`实例,然后使用`updateAppWidget()`方法更新Widget。 ### 3.3 关键变量解释 - `SUBJECT_MARK`: 表示学科标识符的字符串常量。 - `CHINESE_CONSTANT`: 用于表示中文科目的常量值...

    安卓桌面时钟widget代码

    在这个时钟Widget中,开发者会用RemoteViews来创建和更新显示时间的大字体时钟和日期信息。 4. **AlarmManager**: 可能用于定时更新Widget内容。因为Android系统为了节能,不会一直监控Widget的更新,所以开发者...

    Widget 闹钟android实现

    - Android系统会定期检查Widget状态,但为了确保时间的实时性,你可能需要在服务或BroadcastReceiver中手动调用`AppWidgetManager.updateAppWidget()`方法来强制更新Widget。 9. **测试与优化**: - 使用Android...

Global site tag (gtag.js) - Google Analytics