桌面显示组件:AppWidget添加自己的快捷方式

  • 玩转AppWidget????

??????????? 使用安卓的时候相信大家一定还记得快捷方式的运用,就是将一些经常用的软件拖到桌面上以方便操作。例如qq快捷联系人,音乐快捷播放器之类的而这些肯定有一个支持其运行的程序,这些程序必须通过AppWidget组件来完成。

  1. ? AppWidgetProvider:继承自BroadcastReceiver,在App Widget应用update,enable,disable和deleted时接受通知。其中onUpdate,onReceive是最常用到的方法。
  2. ???AppWidgetProviderInfo:描述AppWidget的大小,更新频率和初始界面等信息,以xml文件的形式存在于应用中的res/xml目录下。
  3. ???? AppWidgetManager:负责管理AppWidget,向AppWidgetProvider发送通知。
  4. ???? RemoteViews:一个可以在其他应用进程中运行的类,是构造AppWidget的核心。

首先我们定义MyAppWidget 类extends AppWidgetProvider

?

public class MyAppWidget extends AppWidgetProvider {

	@Override
	public void onDeleted(Context context, int[] appWidgetIds) {
		System.out.println("*** MyAppWidget onDeleted") ;
		super.onDeleted(context, appWidgetIds);
	}

	@Override
	public void onDisabled(Context context) {
		System.out.println("*** MyAppWidget onDisabled") ;
		super.onDisabled(context);
	}

	@Override
	public void onEnabled(Context context) {
		System.out.println("*** MyAppWidget onEnabled") ;
		super.onEnabled(context);
	}

	@Override
	public void onReceive(Context context, Intent intent) {
		System.out.println("*** MyAppWidget onReceive") ;
		super.onReceive(context, intent);
	}

	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds) {
		System.out.println("*** MyAppWidget onUpdate") ;
		super.onUpdate(context, appWidgetManager, appWidgetIds);
	}

}

?

?然后我们想在桌面显示的图标布局函数res\xl\ee.xml

?

?

?

?

 <ImageButton
        android:id="@+id/imageButton1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/a10" />

?定义桌面显示的AppWidgetProvider类配置文件res\xml\ee.xml

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider 
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:minHeight="80px"
	android:minWidth="300px"
	android:updatePeriodMillis="6000"
	android:initialLayout="@layout/ee">//组件所需要的配置文件
</appwidget-provider>

之后就是AnsroidManifest配置

<receiver android:name=".MyAppWidget">
		<intent-filter>
			<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
		</intent-filter>
		<meta-data android:name="android.appwidget.provider"
			android:resource="@xml/ee" />
	</receiver>

??实现效果自己在安卓小组件找到自己定义的AppWidget拖到桌面即可,小编的是这样的哦



?现在其实我们点击桌面上的图标是毫无反应的,这是因为我们还未绑定按钮跳转到相应的Activity上,所以呢,

我们在

public class MyAppWidget extends AppWidgetProvider {
	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds) {
		for (int x = 0; x < appWidgetIds.length; x++) {
			Intent intent = new Intent(context,MyAppWidgetDemo.class) ;
			PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
					intent, PendingIntent.FLAG_UPDATE_CURRENT);
			RemoteViews remote = new RemoteViews(context.getPackageName(),
					R.layout.ee);
			remote.setOnClickPendingIntent(R.id.but, pendingIntent) ;
			appWidgetManager.updateAppWidget(appWidgetIds[x], remote) ;
		}
	}

}
将这个一段改为这样就好,这里用for循环是为了获取多个快捷方式,因为很多爱玩的用户总是喜欢这里建

?一个,那里建一个,因此要获取到所有的快捷方式。

现在我们实现了点击图片跳转到Activity

实现效果如下:


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。