如何在android中点击模拟时钟打开闹钟设置

时间:2012-04-29 20:38:06

标签: android widget

我为Android 4创建了一个模拟时钟小部件。现在我想模仿与本机模拟时钟小部件相同的行为,即在点击时钟时显示警报设置窗口。

搜索后我发现了这个主题:  Intent to launch the clock application on android

启动桌面时钟而不是闹钟设置。我想我必须用android.provider.AlarmClock做一些事情,但我不能让它启动警报窗口。有谁知道如何实现这个目标?

1 个答案:

答案 0 :(得分:0)

在我的AppWidgetProvider课程中,以下内容适用于4.1.2(假设您只希望它在4.x上工作 - 否则您需要条件逻辑来选择正确的包和类名称适当的版本,就像你链接到的帖子一样):

public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    PendingIntent pendingIntent;
    if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) {
        RemoteViews views = new RemoteViews(context.getPackageName(),
                R.layout.main);
        pendingIntent = PendingIntent.getActivity(context, 0,
                getAlarmPackage(context), 0);
        views.setOnClickPendingIntent(R.id.analogClock1, pendingIntent);

        AppWidgetManager
                .getInstance(context)
                .updateAppWidget(
                        intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS),
                        views);
    }
}

private Intent getAlarmPackage(Context context) {
    PackageManager manager = context.getPackageManager();
    Intent intent = new Intent(Intent.ACTION_MAIN)
            .addCategory(Intent.CATEGORY_LAUNCHER);

    try {
        ComponentName c = new ComponentName("com.google.android.deskclock",
                "com.android.deskclock.AlarmClock");
        manager.getActivityInfo(c, PackageManager.GET_META_DATA);
        intent.setComponent(c);
    } catch (NameNotFoundException nf) {
        Log.d("XXXX", "Caught name not found exception!");
    }

    return intent;
}

基本上,使用com.android.deskclock.AlarmClock(使用com.google.android.deskclock)代替com.android.deskclock.DeskClock会生成警报列表而不是闹钟时间屏幕。