AppWidge(一)的使用

 

App Widgets是一种可以嵌入其它应用 并且可以周期性更新的小型应用。例如android的音乐播放器可以加到主界面中显示

添加一个App Widget可通过长按界面   选择Widget直接添加

 

要建立一个App Widgets  需要以下4个步骤

一,AppWidgetProvideinfo  用于定义appWidgetProvideinfo的元数据,需要定义为XML文件,

一般在res/下面新建个xml目录,然后新建example_appwidget_info.xml  ,出现为定义的可删除

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="294dp"    android:minHeight="72dp"
    android:updatePeriodMillis="86400000"
    android:previewImage="@drawable/preview"
    android:initialLayout="@layout/example_appwidget"
   //可不选 android:configure="com.lin.activity.AppWidgetActivity" //定义一个activity,在添加widget时调用" 
    android:resizeMode="horizontal|vertical"></appwidget-provider>



主要有以上属性   updatePeriodMills 为执行更新时间,1.5以后默认好像要半小时(测试下基本不能时时更新)

android:previewImage="@drawable/preview"和 android:resizeMode 3.0以上才能使用 定义显示图标

android:initialLayout="@layout/example_appwidget" 为该App Widget页面显示的内容

configure用于定义一个配置的 activity 例如当在主界面中插入MP3播放条时,可以先让用户选择设置的默认皮肤等

 

二,定义一个 layout来显示App Widget 需要显示的内容,以下为example_appwidget.xml 放在layout文件下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="100dip"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="#00ff33"
        android:text="what a good day" />

</LinearLayout>

三, 需要在AndMainfest.xml中进行配置

在activity下加入

        <receiver android:name="com.lin.activity.ExampleAppWidgetProvider" >
            <intent-filter >
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>

            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/example_appwidget_info" />
        </receiver>

App Widget 是通过广播机制进行传播的

eiver android:name 定义的AppWidgetProvider类

<action android:name  因为通过广播机制实现,所以 默认的action不能变,主要有

android:resource  调用一个appWidget

 

四, 定义一个AppWidgetProvider  得子类

public class ExampleAppWidgetProvider extends AppWidgetProvider {

	//每次删除时调用
	@Override
	public void onDeleted(Context context, int[] appWidgetIds) {
		System.out.println("deleted");
		super.onDeleted(context, appWidgetIds);
	}

	//删除最后一个App Widget时调用
	@Override
	public void onDisabled(Context context) {
		System.out.println("disables"); 
		super.onDisabled(context);
	}
	
	//添加第一个App Widget时调用
	@Override
	public void onEnabled(Context context) {
		System.out.println("enabled");
		super.onEnabled(context);
	}

	//每次添加时调用
	@Override
	public void onReceive(Context context, Intent intent) {
		System.out.println("receiver");
		super.onReceive(context, intent);
	}

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

以上即可实现一个最基本的App Widget

实现App Widget配置

二 当需要对一个选择的AppWidget进行配置时,只需要在example_appwidget_info.xml中加入

//可不选 android:configure="com.lin.activity.AppWidgetActivity" //定义一个activity,在添加widget时调用"

然后添加个activity  以下为AppWidgetActivity .java

public class AppWidgetActivity extends Activity {
    /** Called when the activity is first created. */
	private Button finishBtn;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
		setContentView(R.layout.main);


        finishBtn=(Button)this.findViewById(R.id.finishBtn);
        finishBtn.setOnClickListener(buttonListener);
    }
    View.OnClickListener buttonListener=new View.OnClickListener() {
		
		@Override
		public void onClick(View v) {
			//首先需要从Intent 中获得一个发送过来的AppWidgetManager ID,
			Intent intent = getIntent();
			int mAppWidgetId=0;
			Bundle extras = intent.getExtras();
			if (extras != null) {
				mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,
						AppWidgetManager.INVALID_APPWIDGET_ID);
			}
			//通过AppWidgetManager.getInstance(AppWidgetActivity.this);获得一个实例对象
			AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(AppWidgetActivity.this);
			//获取一个远程layout 然后通过updateAppWidget来更新
			RemoteViews views = new RemoteViews(AppWidgetActivity.this.getPackageName(),
					R.layout.example_appwidget);
			//views.setTextViewText(需要操作的控件ID,设置的值内容)
			appWidgetManager.updateAppWidget(mAppWidgetId, views);
			//设置一个返回的Intent
			Intent resultValue = new Intent();
			resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
			setResult(RESULT_OK, resultValue);
			finish();
		}
	};
}


当需要通过App Widget界面上的控件发送消息时,例如Mp3  的播放暂停

可将ExampleAppWidgetInfo.java中的 onUpdate()修改为

	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds) {
		System.out.println("onUpdate");
		for(int i=0;i<appWidgetIds.length;i++){
			//创建一个Intent对象
		Intent intent=new Intent(context,AndroidTestActivity.class);
		// 创建一个PendingIntent对象
		PendingIntent pendingIntent=PendingIntent.getActivity(context,0,intent,0);
		RemoteViews remoteViews=new RemoteViews(context.getPackageName(),R.layout.appwidget);
		remoteViews.setOnClickPendingIntent(R.id.bindBtn,pendingIntent);
		
		appWidgetManager.updateAppWidget(appWidgetIds[i],remoteViews);
		}
		super.onUpdate(context, appWidgetManager, appWidgetIds);
	}


类似于前面点击配置的绑定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值