Android应用程序模拟时钟小部件不工作

Android应用程序模拟时钟小部件不工作,android,android-intent,widget,android-widget,clock,Android,Android Intent,Widget,Android Widget,Clock,我正在尝试为应用程序创建一个模拟时钟小部件。我已经这样做了,时钟工作,但我想,当被点击时,它会打开默认或安装的时钟应用程序 这是我已经实现的代码。几个月前它还在工作。(因为上大学,我不得不停止发展) 有人能告诉我如何修理它并使它重新工作吗 编辑:我确信代码输入了views.setonClickPendingContent()的部分。。。但时钟应用程序未启动/打开 提前谢谢 代码: 公共类ClockWidget扩展了AppWidgetProvider{ 公共HashMap-activityMap;

我正在尝试为应用程序创建一个模拟时钟小部件。我已经这样做了,时钟工作,但我想,当被点击时,它会打开默认或安装的时钟应用程序

这是我已经实现的代码。几个月前它还在工作。(因为上大学,我不得不停止发展)

有人能告诉我如何修理它并使它重新工作吗

编辑:我确信代码输入了views.setonClickPendingContent()的部分。。。但时钟应用程序未启动/打开

提前谢谢

代码:

公共类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
        }
    }
}