Android桌面組件App Widget完整案例
本文實例講述了Android桌面組件App Widget用法。分享給大家供大家參考。具體如下:
這里模擬一個案例:把AppWidget添加到桌面后,點擊AppWidget后AppWidget文本會輪回改變
main.xml布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/tv" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="程序入口" android:textSize="50dip"/> </LinearLayout>
res/xml/my_appwidget.xml布局文件:
<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="120dp" android:minHeight="60dp" android:updatePeriodMillis="1000" android:initialLayout="@layout/main"> </appwidget-provider>
清單文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ljq.activity" android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<receiver android:name=".TestActivity">
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/my_appwidget">
</meta-data>
<intent-filter>
<action android:name="COM.LJQ.ACTION.WIDGET.CLICK"></action>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
</receiver>
</application>
<uses-sdk android:minSdkVersion="7" />
</manifest>
變量類UtilTool:用來控件文本改變:
package com.ljq.activity;
public class UtilTool {
public static boolean isChange=true;
}
TestActivity類,繼承自AppWidgetProvider:
package com.ljq.activity;
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 TestActivity extends AppWidgetProvider {
// 自定義一個Action名
private static final String ACTION_CLICK_NAME = "COM.LJQ.ACTION.WIDGET.CLICK";
private RemoteViews rv;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
System.out.println("onUpdate");
//獲取R.layout.main布局,通過類RemoteViews對布局R.layout.main里的控件進行操作
/*rv = new RemoteViews(context.getPackageName(), R.layout.main);
Intent intentClick = new Intent(ACTION_CLICK_NAME);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intentClick, 0);
rv.setOnClickPendingIntent(R.id.tv, pendingIntent);
ComponentName cmp = new ComponentName(context, TestActivity.class);
AppWidgetManager myAppWidgetManager = AppWidgetManager.getInstance(context);
myAppWidgetManager.updateAppWidget(cmp, rv);*/
final int N = appWidgetIds.length;
for (int i = 0; i < N; i++) {
int appWidgetId = appWidgetIds[i];
updateAppWidget(context, appWidgetManager, appWidgetId);
}
}
//AppWidget生命周期: 每接收一次,廣播執(zhí)行一次為一個生命周期結(jié)束。
//也就是說在重寫AppWidgetProvider類里面聲明全局變量做狀態(tài)判斷,
//每次狀態(tài)改變AppWidgetProvider再接收第二次廣播時即為你重新初始化也就是說重新實例化了一次AppWidgetProvider。
//今天我因為在里面放了一個boolean值初始化為true,觀察調(diào)試看到每次進入都為TRUE故你在設(shè)置桌面組件時,
//全局變量把它聲明在另外一個實體類用來判斷是沒問題的,切忌放在本類。
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("onReceive");
if (rv == null) {
rv = new RemoteViews(context.getPackageName(), R.layout.main);
}
if (intent.getAction().equals(ACTION_CLICK_NAME)) {
if (UtilTool.isChange) {
rv.setTextViewText(R.id.tv, "abc");
} else {
rv.setTextViewText(R.id.tv, "123");
}
UtilTool.isChange = !UtilTool.isChange;
AppWidgetManager appWidgetManger = AppWidgetManager.getInstance(context);
int[] appIds = appWidgetManger.getAppWidgetIds(new ComponentName(context, TestActivity.class));
appWidgetManger.updateAppWidget(appIds, rv);
}else{
super.onReceive(context, intent);
}
}
private void updateAppWidget(Context context,
AppWidgetManager appWidgeManger, int appWidgetId) {
rv = new RemoteViews(context.getPackageName(), R.layout.main);
Intent intentClick = new Intent();
intentClick.setAction(ACTION_CLICK_NAME);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intentClick, 0);
rv.setOnClickPendingIntent(R.id.tv, pendingIntent);
appWidgeManger.updateAppWidget(appWidgetId, rv);
}
}
希望本文所述對大家的Android程序設(shè)計有所幫助。
相關(guān)文章
Android編程實現(xiàn)在Activity中操作刷新另外一個Activity數(shù)據(jù)列表的方法
這篇文章主要介紹了Android編程實現(xiàn)在Activity中操作刷新另外一個Activity數(shù)據(jù)列表的方法,結(jié)合具體實例形式分析了2種常用的Activity交互實現(xiàn)技巧,需要的朋友可以參考下2017-06-06
Android程序開發(fā)之手機APP創(chuàng)建桌面快捷方式
這篇文章主要介紹了Android程序開發(fā)之手機APP創(chuàng)建桌面快捷方式 的相關(guān)資料,需要的朋友可以參考下2016-04-04
Android studio 項目手動在本地磁盤中刪除module后,殘留文件夾無法刪除的問題解決方法
這篇文章主要介紹了Android studio 項目手動在本地磁盤中刪除module后,殘留文件夾無法刪除問題,本文給出了解決方法,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03
Android TCP 文件客戶端與服務(wù)器DEMO介紹
首先是服務(wù)器,服務(wù)器是在PC機上,JAVA運行環(huán)境,主要參考網(wǎng)上的代碼,自己做了支持多線程處理,代碼如下所示。需要的朋友可以過來參考下,希望對大家有所幫助2013-11-11
Android實現(xiàn)抽獎轉(zhuǎn)盤實例代碼
這篇文章主要介紹了Android實現(xiàn)抽獎轉(zhuǎn)盤實例代碼,可以應用于Android游戲開發(fā)中的一個應用,需要的朋友可以參考下2014-07-07
Android編程實現(xiàn)類似天氣預報圖文字幕垂直滾動效果的方法
這篇文章主要介紹了Android編程實現(xiàn)類似天氣預報圖文字幕垂直滾動效果的方法,涉及Android基于布局及事件響應實現(xiàn)圖文滾動效果的相關(guān)操作技巧,需要的朋友可以參考下2017-08-08

