AlarmClock 意图说 "No apps can perform this action."
AlarmClock intent says "No apps can perform this action."
我正在尝试在闹钟中设置闹钟。我正在使用 Android One Phone(具有未修改的 OS)并安装了允许设置闹钟的时钟应用程序(预装)。过去,当我不得不在后台设置警报时使用 AlarmManager 和 PendingIntent 时,设置警报一直有效。这表明我的时钟应用程序可以响应 AlarmClock
意图。但是现在当我试图从我的应用程序的前台发送一个意图时,它说:
No apps can perform this action.
这不是来自堆栈跟踪,而是显示给用户的弹出窗口,用于选择要选择哪个时钟应用程序来设置闹钟(或通常用于意图的应用程序)
这是我调用它的 Activity 的 onCreate()
代码:
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, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
if (alarmIntent != null) {
alarmMgr.cancel(alarmIntent);
} else {
Log.i(TAG, "intent is null");
}
我做错了什么?任何帮助表示赞赏。
以下评论只是质疑并要求对问题进行更多澄清,已按要求完成。所以你可以跳过阅读它们
No apps can perform this action.
如果您没有设置闹钟所需的权限,就会出现这种情况。
Applications that wish to receive the ACTION_SET_ALARM and ACTION_SET_TIMER Intents should create an activity to handle the Intent that requires the permission com.android.alarm.permission.SET_ALARM.
请求SET_ALARM
权限:
<mainfest
...
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
</manifest>
我正在尝试在闹钟中设置闹钟。我正在使用 Android One Phone(具有未修改的 OS)并安装了允许设置闹钟的时钟应用程序(预装)。过去,当我不得不在后台设置警报时使用 AlarmManager 和 PendingIntent 时,设置警报一直有效。这表明我的时钟应用程序可以响应 AlarmClock
意图。但是现在当我试图从我的应用程序的前台发送一个意图时,它说:
No apps can perform this action.
这不是来自堆栈跟踪,而是显示给用户的弹出窗口,用于选择要选择哪个时钟应用程序来设置闹钟(或通常用于意图的应用程序)
这是我调用它的 Activity 的 onCreate()
代码:
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, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
if (alarmIntent != null) {
alarmMgr.cancel(alarmIntent);
} else {
Log.i(TAG, "intent is null");
}
我做错了什么?任何帮助表示赞赏。 以下评论只是质疑并要求对问题进行更多澄清,已按要求完成。所以你可以跳过阅读它们
No apps can perform this action.
如果您没有设置闹钟所需的权限,就会出现这种情况。
Applications that wish to receive the ACTION_SET_ALARM and ACTION_SET_TIMER Intents should create an activity to handle the Intent that requires the permission com.android.alarm.permission.SET_ALARM.
请求SET_ALARM
权限:
<mainfest
...
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
</manifest>