アンドロイド学習ノートのwidgetデスクトップコントロール
アンドロイド学習ノートのwidgetデスクトップコントロール
使用手順
必要なReceiverを作成し、リストファイルに配置します.
1、アプリWidgetMangerのgetInstance方法でWidgetマネージャ2、実装Timerオブジェクトを取得し、TimerTaskでスレッドを作成し、timerのschedule方法でタイミングタスク3をオープンし、TimeTaskのrun方法でWidgetに必要なRemoteViewsを作成し、対応するコントロールとCompone 4を作成します.RemoteViewsとComponentNameをwidgetに設定し、widgetを更新します.
使用手順
必要なReceiverを作成し、リストファイルに配置します.
<!-- -->
<receiver android:name="com.yu.receiver.SaferAppWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/safer_appwidget_info" />
</receiver>
package com.yu.receiver;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import com.yu.service.KillProcesWidgetService;
public class SaferAppWidgetProvider extends AppWidgetProvider {
/** * */
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
}
/** * */
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
//
context.startService(new Intent(context,KillProcesWidgetService.class));
}
/** * */
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
super.onDeleted(context, appWidgetIds);
}
/** * */
@Override
public void onEnabled(Context context) {
super.onEnabled(context);
}
/** * */
@Override
public void onDisabled(Context context) {
super.onDisabled(context);
//
context.startService(new Intent(context,KillProcesWidgetService.class));
}
/** * Called in response to the AppWidgetManager.ACTION_APPWIDGET_RESTORED broadcast * when instances of this AppWidget provider have been restored from backup */
@Override
public void onRestored(Context context, int[] oldWidgetIds,
int[] newWidgetIds) {
super.onRestored(context, oldWidgetIds, newWidgetIds);
}
}
srcのxmlファイルでsafer_を作成します.appwidget_info.xmlは、widgetを配置するために使用されます.<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/widget_process_safer" android:minHeight="75.0dip" <!-minHeight , widget --> android:minWidth="294.0dip" android:updatePeriodMillis="0" /><!- 0, -->
layoutディレクトリでwidgetのレイアウトファイルwidget_を作成します.process.safer<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/widget_bg_portrait" android:orientation="horizontal" >
<LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/widget_bg_portrait_child" android:gravity="center" android:orientation="vertical" >
<TextView android:id="@+id/tv_count_widget" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" " />
<TextView android:id="@+id/tv_freeMem_widget" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="6dp" android:text=" " />
</LinearLayout>
<LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center" android:padding="5dp" android:orientation="vertical" >
<TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text=" " />
<Button android:id="@+id/bt_clean" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="match_parent" android:background="@drawable/bt_selector" android:layout_marginTop="6dp" android:paddingLeft="3dp" android:paddingRight="3dp" android:textColor="#000" android:text=" " />
</LinearLayout>
</LinearLayout>
設定が完了しました.widgetの使用を開始します.widgetを更新するためのサービスを新設します.1、アプリWidgetMangerのgetInstance方法でWidgetマネージャ2、実装Timerオブジェクトを取得し、TimerTaskでスレッドを作成し、timerのschedule方法でタイミングタスク3をオープンし、TimeTaskのrun方法でWidgetに必要なRemoteViewsを作成し、対応するコントロールとCompone 4を作成します.RemoteViewsとComponentNameをwidgetに設定し、widgetを更新します.
package com.yu.service;
import java.util.Timer;
import java.util.TimerTask;
import com.yu.receiver.SaferAppWidgetProvider;
import com.yu.safer.R;
import com.yu.utils.SystemInfoUtils;
import android.app.PendingIntent;
import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Intent;
import android.os.IBinder;
import android.text.format.Formatter;
import android.widget.RemoteViews;
/** * * @author Administrator * */
public class KillProcesWidgetService extends Service {
AppWidgetManager awm;
ComponentName appWidgetProvider;
Timer timer;
TimerTask task;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// widget
awm = AppWidgetManager.getInstance(this);
// 5 widget
timer = new Timer();
task = new TimerTask() {
@Override
public void run() {
// view(RemoteViews)
RemoteViews views = new RemoteViews(getPackageName(), R.layout.widget_process_safer);
//
int count = SystemInfoUtils.getRunningAppCount(KillProcesWidgetService.this);
//
String freeMem = Formatter.formatFileSize(KillProcesWidgetService.this,
SystemInfoUtils.getFreeMemoryInfo(KillProcesWidgetService.this));
// views
views.setTextViewText(R.id.tv_count_widget, " :"+count+" ");
views.setTextViewText(R.id.tv_freeMem_widget, " :"+freeMem);
Intent i = new Intent();
//
i.setAction("com.yu.safer.widget");
// PendingIntent
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, i, 0);
//
views.setOnClickPendingIntent(R.id.bt_clean, pendingIntent );
appWidgetProvider = new ComponentName(getApplicationContext(), SaferAppWidgetProvider.class);
awm.updateAppWidget(appWidgetProvider, views);
}
};
timer.schedule(task, 1000, 5000);
return super.onStartCommand(intent, flags, startId);
}
}