Widget 小结 (一)

 
 

源代码下载地址: http://download.csdn.net/detail/null1989/4821419

本文主要是关于桌面widget~~~

以最近做的备忘录(memo)为例,具体的操作步骤见下图:

关于具体实现:

Widget 小结 (一)_第1张图片

黄色部分为重点代码~~

PART 1:

WidgetDemoProvider.java 

package com.gxq.widgetdemo;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.util.Log;

public class WidgetDemoProvider extends AppWidgetProvider {

	private static final String TAG = "WidgetDemoProvider";
	
	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds) {
		// 在widget创建及被更新时调用
		final int N = appWidgetIds.length;
		for(int i=0; i< N ;i++){
			int appWidgetId = appWidgetIds[i];
			Log.d(TAG, "this is " + appWidgetId + " onUpdated!");
		}
	}

	@Override
	public void onDeleted(Context context, int[] appWidgetIds) {
		// 在widget被删除时调用
		final int N = appWidgetIds.length;
		for(int i=0; i< N ;i++){
			int appWidgetId = appWidgetIds[i];
			Log.d(TAG, "this is " + appWidgetId + " onDeleted!");
		}
	}

}

由于memo的特殊情况,没有用到这两个函数。。


WidgetDemoConfigActivity.java:这个是添加widget之前要进入的配置activity, 部分重要代码如下:

@Override
	protected void onCreate(Bundle savedInstanceState) {
		Log.d(TAG, "enter onCreate");
		
		//to hide the titlebar
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		
		mContext = this;
		super.onCreate(savedInstanceState);
		setContentView(R.layout.widgetdemo_layout);
	 
		//inital the result returned
		this.setResult(RESULT_CANCELED);
		
		//get the widgetid
		Intent intent = this.getIntent();
		Bundle extras = intent.getExtras();
		if(extras != null){
			mWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
		}
		
		//check whether the widget id is valid or not
		if(mWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID){
			Log.d(TAG, "INVALID_APPWIDGET_ID");
			finish();
		}
		
		//the id is valid 
		Log.d(TAG, "VALID_APPWIDGET_ID");
		
		mSaveBtn = (ImageButton) this.findViewById(R.id.save_btn);
		mCancelBtn = (ImageButton) this.findViewById(R.id.cancel_btn);
		mAboutBtn = (ImageButton) this.findViewById(R.id.about_btn);
		mEditText = (EditText) this.findViewById(R.id.editText);

		mSaveBtn.setOnClickListener(btnClickListener);
		mCancelBtn.setOnClickListener(btnClickListener);
		mAboutBtn.setOnClickListener(btnClickListener);
		
	}


	OnClickListener btnClickListener = new OnClickListener(){
			@Override
			public void onClick(View v) {
				int id = v.getId();
				switch(id){
				case R.id.save_btn:
					Log.d(TAG, "save_btn");
					isSave = true;
					saveMemo();
					break;
				case R.id.cancel_btn:
					Log.d(TAG, "cancel_btn");
					//exit the activity
					cancel();
					break;
				case R.id.about_btn:
					showAbout();
					Log.d(TAG, "about_btn");
					break;
				}

				if(isSave){
				RemoteViews remoteView = new RemoteViews(WidgetDemoConfigActivity.this.getPackageName(),
						R.layout.widgetdemo_icon_layout);
				remoteView.setImageViewResource(R.id.widget_icon_id, R.drawable.about_btn1);
				
				//to make the widget icon can be clicked
				Intent intent_edit = new Intent(mContext, WidgetDemoActivity.class);
//				Intent intent_edit = new Intent(mContext, AlertDialogDemoActivity.class);
				intent_edit.setAction(PREF_KEY + mWidgetId);
				intent_edit.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,mWidgetId);  
				PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0,  
						intent_edit, 0);  
				remoteView.setOnClickPendingIntent(R.id.widget_icon_id, pendingIntent);  
				
				AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(WidgetDemoConfigActivity.this);
				appWidgetManager.updateAppWidget(mWidgetId, remoteView);
				
				Intent resultIntent = new Intent();
				resultIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mWidgetId);
				WidgetDemoConfigActivity.this.setResult(RESULT_OK, resultIntent);
				finish();
			}
			}
		};
		

WidgetDemoActivity.java:这个是单击桌面上的widget icon 启动的activity,即显示memo的具体内容的~~




你可能感兴趣的:(Widget 小结 (一))