问题描述
我正试图在闹钟中设置一个闹钟。我正在使用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}}
我在做什么错?任何帮助表示赞赏。 以下评论仅是质问并要求对该问题进行更多的澄清,这些操作已按要求进行。所以您可以跳过阅读
解决方法
没有应用程序可以执行此操作。
当您没有设置警报所需的权限时,就会发生这种情况。
希望接收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>