AlarmClock意图显示“没有应用程序可以执行此操作”

问题描述

我正试图在闹钟中设置一个闹钟。我正在使用Android One Phone(具有未修改的操作系统),并已安装Clock应用程序(已预先安装),该应用程序可以设置闹钟。过去,当我不得不在后台设置闹钟时,使用AlarmManager和PendingIntent可以设置闹钟。这表明我的时钟应用程序可以响应onCreate()的意图。但是现在,当我尝试从应用程序的前台发送意图时,它说:

没有应用程序可以执行此操作。

这不是来自堆栈跟踪的信息,而是一个弹出窗口,向用户显示以选择要设置闹钟的Clock应用(或通常用于意图的应用)

这是活动的public class MainActivity extends AppCompatActivity { ... @Override protected void onCreate(Bundle savedInstanceState) { ... Utils.setAlarm(this,Utils.getLDT(epochTime).plusHours(8)); } } 代码,我称之为:

Utils#setAlarm

这是发送意图的public class Utils { public static void setAlarm(Context context,LocalDateTime alarmTimeDT) { Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM); intent.putExtra(AlarmClock.EXTRA_SKIP_UI,true); intent.putExtra(AlarmClock.EXTRA_HOUR,alarmTimeDT.getHour()); intent.putExtra(AlarmClock.EXTRA_MINUTES,alarmTimeDT.getMinute()); intent.putExtra(AlarmClock.EXTRA_MESSAGE,"Good Morning"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } ... } 函数

        //cancel old alarm
        AlarmManager alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
        PendingIntent alarmIntent = PendingIntent.getActivity(
                this,i,PendingIntent.FLAG_UPDATE_CURRENT);
        if (alarmIntent != null) {
            alarmMgr.cancel(alarmIntent);
        } else {
            Log.i(TAG,"intent is null");
        }

这是过去用于同一设备和同一Clock应用程序的其他代码。这是用于取消已设置的警报,但是用于设置旧警报的代码与“取消”部分相似:

{{1}}

我在做什么错?任何帮助表示赞赏。 以下评论仅是质问并要求对该问题进行更多的澄清,这些操作已按要求进行。所以您可以跳过阅读

解决方法

没有应用程序可以执行此操作。

当您没有设置警报所需的权限时,就会发生这种情况。

来自AlarmClock reference

希望接收ACTION_SET_ALARM和ACTION_SET_TIMER意向的应用程序应创建一个活动来处理需要com.android.alarm.permission.SET_ALARM权限的意向。

请求SET_ALARM权限:

<mainfest
    ...
    <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>

</manifest>