Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android開發之APP Widget

android開發之APP Widget

編輯:關於Android編程

android開發之APP Widget

本博文主要講述的android開發中的桌面程序的開發--APP widget,主要用的是PendingIntent和RemoteViews。 PendingIntent主要用來設置桌面程序的相應方式。此對象可以有三種Intent方式,第一個是開始一個新的Activity,第二個是發送一個廣播,第三個是開始一個service。
RemoteViews的作用:因為桌面程序和app程序不是屬於一個進程,不能通過正常的操作控件的方式來操作。需要使用系統提供的RemoteViews對象來操作桌面程序。在這個類中有設置APP Widget中控件屬性的方法。
下面我們來看看代碼,在代碼中有分別包含了上述所說的PendingInetnt的兩種方式(part 1:開始一個新的Activity;part 2:發送一個廣播)和RemoteViews的使用方法:
主程序的Activity,MainActivity.java:
package com.example.appwidget;


import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;


public class MainActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}


}





appwidget桌面程序的類AppWidgetProviderTest.java:

package com.example.appwidget;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;


public class AppWidgetProviderTest extends AppWidgetProvider {


//自定義一個ACTION常量
private final String USER_ACTION = "com.example.appwiget.USER_ACTION";



//當APP widget實例被刪除時,會調用
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
// TODO Auto-generated method stub
super.onDeleted(context, appWidgetIds);
System.out.println("onDeleted()");
}


//當最後一個app widget實例被刪除時,會調用
@Override
public void onDisabled(Context context) {
// TODO Auto-generated method stub
super.onDisabled(context);
System.out.println("onDisabled()");
}


//當第一個App widget實例被創建時,會調用
@Override
public void onEnabled(Context context) {
// TODO Auto-generated method stub
super.onEnabled(context);
System.out.println("onEnabled()");
}



//接收app收到的所有廣播事件
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
System.out.println("onReceive()");
//比較下,如果收到的廣播是USER_ACTION,則輸出信息,且更新桌面控件
if(USER_ACTION.equals(intent.getAction())){
System.out.println("onReceive --> " + USER_ACTION);
//獲得RemoteViews對象
RemoteViews remoteView = new RemoteViews(context.getPackageName(),R.layout.appwidget_provider);

//更新桌面TextView控件的text
remoteView.setTextViewText(R.id.myText, "onReceive");

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName componentName = new ComponentName(context, AppWidgetProviderTest.class);

appWidgetManager.updateAppWidget(componentName, remoteView);

}else{
//調用父類的方法
super.onReceive(context, intent);
}
}


//在到達指定的更新時間之後或者向桌面添加App widget實例時,會調用此方法
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// TODO Auto-generated method stub
super.onUpdate(context, appWidgetManager, appWidgetIds);
System.out.println("onUpdate()");

//為每一個app widget實例綁定一個remoteViews監聽器,每創建的一個app widget實例都有一個對應的ID
for(int i = 0; i < appWidgetIds.length; i ++){

System.out.println("appWidgetIds -->" + appWidgetIds[i]);
//創建一個Intent對象
Intent intent = new Intent();

//part 1:pendingIntent用來打開一個新的Activity
/*intent.setClass(context, MainActivity.class);

//使用getActivity方法創建一個pendingIntent對象,此對象用於跳轉Activity,將intent打包給pendingIntent
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
*/
//end part1

//part 2:pendingIntent用來發送一個廣播
//設置action
intent.setAction(USER_ACTION);
//使用getBroadcast()方法創建一個pendingIntent對象
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
//end part2

//創建一個RemoteViews對象
RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider);

//RemoteViews對象將Button和pendingIntent綁定。通過pendingIntent獲得intent
remoteView.setOnClickPendingIntent(R.id.WidgetButton, pendingIntent);

appWidgetManager.updateAppWidget(appWidgetIds[i], remoteView);

}

}
}



主程序的主布局文件main.xml:(程序的主界面) xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >


android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />



app widget的界面布局文件appwidget_provider.xml:(在桌面看到的界面)
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

android:id="@+id/myText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="welcome appwidget"
android:background="#ff0000"
/>
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved