Android应用程序模拟时钟小部件不工作
我正在尝试为应用程序创建一个模拟时钟小部件。我已经这样做了,时钟工作,但我想,当被点击时,它会打开默认或安装的时钟应用程序 这是我已经实现的代码。几个月前它还在工作。(因为上大学,我不得不停止发展) 有人能告诉我如何修理它并使它重新工作吗 编辑:我确信代码输入了views.setonClickPendingContent()的部分。。。但时钟应用程序未启动/打开 提前谢谢 代码:Android应用程序模拟时钟小部件不工作,android,android-intent,widget,android-widget,clock,Android,Android Intent,Widget,Android Widget,Clock,我正在尝试为应用程序创建一个模拟时钟小部件。我已经这样做了,时钟工作,但我想,当被点击时,它会打开默认或安装的时钟应用程序 这是我已经实现的代码。几个月前它还在工作。(因为上大学,我不得不停止发展) 有人能告诉我如何修理它并使它重新工作吗 编辑:我确信代码输入了views.setonClickPendingContent()的部分。。。但时钟应用程序未启动/打开 提前谢谢 代码: 公共类ClockWidget扩展了AppWidgetProvider{ 公共HashMap-activityMap;
公共类ClockWidget扩展了AppWidgetProvider{
公共HashMap-activityMap;
包装管理器包装管理器;
@凌驾
公共void onReceive(上下文、意图){
packageManager=context.getPackageManager();
布尔值foundApp=false;
setupHashMap();
String action=intent.getAction();
if(AppWidgetManager.ACTION\u APPWIDGET\u UPDATE.equals(ACTION)){
RemoteView视图=新的RemoteView(context.getPackageName(),
R.布局、时钟(小部件);
Intent clockAppIntent=新Intent();
clockAppIntent.setAction(Intent.ACTION_MAIN);
clockAppIntent.addCategory(Intent.CATEGORY_启动器);
对于(字符串packageName:activityMap.keySet()){
if(Util.isAppInstalled(context,packageName)){
ComponentName cn=新组件名(packageName,activityMap.get(packageName));
clockAppIntent.setComponent(cn);
clockAppIntent.addFlags(Intent.FLAG\u活动\u新任务);
foundApp=true;
打破
}
}
如果(foundApp){
views.SetOnClickPendingContent(R.id.clockWidget,
getActivity(上下文,0,clockAppIntent,0));
}
AppWidgetManager.getInstance(上下文)
.updateAppWidget(intent.getIntArrayExtra(AppWidgetManager.EXTRA\u APPWIDGET\u id),视图);
}
}
私有void setupHashMap(){
activityMap=newHashMap();
activityMap.put(“com.android.alarmclock”、“com.android.alarmclock.alarmclock”);
activityMap.put(“com.android.deskclock”、“com.android.deskclock.deskclock”);
activityMap.put(“com.google.android.deskclock”、“com.google.android.deskclock.deskclock”);
activityMap.put(“com.google.android.deskclock”、“com.android.deskclock.AlarmClock”);
activityMap.put(“com.sec.android.app.clockpackage”,“com.sec.android.app.clockpackage.clockpackage”);
activityMap.put(“com.sonyericsson.alarm”、“com.sonyericsson.alarm.alarm”);
activityMap.put(“com.sonyericsson.organizer”、“com.sonyericsson.organizer.organizer_WorldClock”);
activityMap.put(“com.asus.alarmclock”、“com.asus.alarmclock.alarmclock”);
activityMap.put(“com.asus.deskclock”、“com.asus.deskclock.deskclock”);
activityMap.put(“com.htc.android.worldclock”、“com.htc.android.worldclock.WorldClockTabControl”);
activityMap.put(“com.motorola.blur.alarmclock”、“com.motorola.blur.alarmclock.alarmclock”);
activityMap.put(“com.lge.clock”、“com.lge.clock.AlarmClockActivity”);
}
}
舱单:
<receiver
android:name=".widgets.ClockWidget"
android:label="@string/clock_widget_title">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/clock_widget_provider"/>
</receiver>
布局:
<?xml version="1.0" encoding="utf-8"?>
<AnalogClock
android:id="@+id/clockWidget"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:dial="@drawable/clock_bg"
android:hand_hour="@drawable/clock_hour_hand"
android:hand_minute="@drawable/clock_minute_hand"/>
提供者:
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/clock_widget"
android:minHeight="144dip"
android:minWidth="144dip"
android:updatePeriodMillis="0"
android:widgetCategory="home_screen"/>
以下是一些代码片段,让您开始重构这个巨大的if()块
下面是一些代码片段,帮助您开始重构这个巨大的if()块
我的第一个想法是,应该去掉巨大的if()块,用迭代器替换它。将包/类名常量移动到查找表中,并对其进行迭代器运算。@Jameson Ok,但如何操作?您可以发布一些代码供参考吗?我的第一个想法是,您应该去掉巨大的if()块,并用迭代器替换它。将包/类名常量移动到查找表中,并对其进行迭代器运算。@Jameson Ok,但如何操作?你可以发布一些代码供参考吗?
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/clock_widget"
android:minHeight="144dip"
android:minWidth="144dip"
android:updatePeriodMillis="0"
android:widgetCategory="home_screen"/>
HashMap activityMap;
private void setupHashMap() {
// setup a map from the package name to the activity that
// is responsible for the clock
activityMap = new HashMap(String, String);
activityMap.put("com.package.foo", "com.package.foo.AlarmClock");
// ... add your items ...
}
private void launchAlarmClock() {
// setup intent
for (String packageName : activityMap.keySet()) {
if (Util.appIsInstalled(context, packageName)) {
Log.d(TAG, "Using the " + packageName + "alarm clock.");
intent.setPackage(packageName);
intent.setComponent(new ComponentName(packageName,
activityMap.get(packageName)));
// do something with the intent
}
}
}