兰州大学本科生毕业论文 基于android平台“每日一句”应用的设计与实现
附录C 桌面插件相关代码
package com.note;
import android.annotation.SuppressLint; import android.app.PendingIntent;
import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.net.Uri;
import android.widget.RemoteViews; import android.widget.Toast; import android.util.Log;
import java.util.Set; import java.util.HashSet; import java.util.Iterator;
@SuppressLint(\
public class ExampleAppWidgetProvider extends AppWidgetProvider { private static final String TAG = \
private boolean DEBUG = false;
// 启动ExampleAppWidgetService服务对应的action private final Intent EXAMPLE_SERVICE_INTENT =
new
Intent(\
// 更新 widget 的广播对应的action
private
final
String
ACTION_UPDATE_ALL 35
=
兰州大学本科生毕业论文 基于android平台“每日一句”应用的设计与实现
\
// 保存 widget 的id的HashSet,每新建一个 widget 都会为该 widget 分配一个 id。
private static Set
R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7,
private static final int BUTTON_SHOW = 1; private static final int[] ARR_IMAGES = { }; }
// 每次 widget 被创建时,对应的将widget的id添加到set中 for (int appWidgetId : appWidgetIds) { } prtSet();
idsSet.add(Integer.valueOf(appWidgetId));
// onUpdate() 在更新 widget 时,被执行, @Override public
void
onUpdate(Context
context,
AppWidgetManager
appWidgetManager, int[] appWidgetIds) {
Log.d(TAG, \
// 当 widget 被初次添加 或者 当 widget 的大小被改变时,被调用 @Override
36
兰州大学本科生毕业论文 基于android平台“每日一句”应用的设计与实现
public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) {
Log.d(TAG, \
appWidgetManager,
super.onAppWidgetOptionsChanged(context, appWidgetId,
newOptions); }
// widget被删除时调用 @Override
public void onDeleted(Context context, int[] appWidgetIds) {
// 当 widget 被删除时,对应的删除set中保存的widget的id for (int appWidgetId : appWidgetIds) { } prtSet();
idsSet.remove(Integer.valueOf(appWidgetId));
Log.d(TAG,
\
appWidgetIds.length=\
super.onDeleted(context, appWidgetIds); }
// 第一个widget被创建时调用 @Override
public void onEnabled(Context context) {
Log.d(TAG, \
// 在第一个 widget 被创建时,开启服务
context.startService(EXAMPLE_SERVICE_INTENT);
super.onEnabled(context); }
37
兰州大学本科生毕业论文 基于android平台“每日一句”应用的设计与实现
// 最后一个widget被删除时调用 @Override
public void onDisabled(Context context) {
super.onDisabled(context); }
// 接收广播的回调函数 @Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction(); Log.d(TAG, \ if (ACTION_UPDATE_ALL.equals(action)) { // “更新”广播
updateAllAppWidgets(context, AppWidgetManager.getInstance(context), idsSet);
} else if (intent.hasCategory(Intent.CATEGORY_ALTERNATIVE)) {
// “按钮点击”广播
Uri data = intent.getData();
int buttonId = Integer.parseInt(data.getSchemeSpecificPart()); if (buttonId == BUTTON_SHOW) { } }
Log.d(TAG, \Toast.makeText(context,
\
Clicked\
// 在最后一个 widget 被删除时,终止服务 context.stopService(EXAMPLE_SERVICE_INTENT); Log.d(TAG, \
Toast.LENGTH_SHORT).show();
super.onReceive(context, intent);
38
兰州大学本科生毕业论文 基于android平台“每日一句”应用的设计与实现
}
// 更新所有的 widget
private void updateAllAppWidgets(Context context, AppWidgetManager appWidgetManager, Set
Log.d(TAG, \
// widget 的id int appID;
// 迭代器,用于遍历所有保存的widget的id Iterator
appID = ((Integer)it.next()).intValue(); // 随机获取一张图片 int
if (DEBUG) Log.d(TAG, \ // 获取 example_appwidget.xml 对应的RemoteViews RemoteViews
// 设置显示图片
remoteView.setImageViewResource(R.id.iv_show,
// 设置点击按钮对应的PendingIntent:即点击按钮时,发送广播。 remoteView.setOnClickPendingIntent(R.id.btn_show,
remoteView
=
new
index
=
(new
java.util.Random().nextInt(ARR_IMAGES.length));
RemoteViews(context.getPackageName(), R.layout.example_appwidget);
ARR_IMAGES[index]);
/*
getPendingIntent(context,
BUTTON_SHOW)); */
39