闹钟意图说“没有应用程序可以执行此操作。”
Posted
技术标签:
【中文标题】闹钟意图说“没有应用程序可以执行此操作。”【英文标题】:AlarmClock intent says "No apps can perform this action." 【发布时间】:2020-08-29 16:54:37 【问题描述】:我正在尝试在闹钟中设置闹钟。我正在使用 android One Phone(具有未修改的操作系统)并安装了允许设置闹钟的时钟应用程序(预安装)。过去,当我不得不在后台设置警报时,我使用了 AlarmManager 和 PendingIntent 来设置警报。这表明我的时钟应用可以响应AlarmClock
意图。但是现在当我尝试从我的应用程序的前台发送一个意图时,它会说:
没有应用可以执行此操作。
这不是来自堆栈跟踪,而是向用户显示的一个弹出窗口,供用户选择选择哪个时钟应用来设置警报(或一般用于意图的应用)
这是 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");
我做错了什么?任何帮助表示赞赏。 下面的 cmets 只是在询问并要求对问题进行更多澄清,这些都是按要求完成的。所以你可以跳过阅读它们
【问题讨论】:
“我安装了允许设置闹钟的默认时钟应用程序”——Android 没有单一的“默认时钟应用程序”。根据设备制造商选择发布的内容,默认时钟应用程序有几十个,如果不是几百个的话。也许您的设备有时钟应用,但没有响应此Intent
操作的应用。
@CommonsWare “默认”我的意思是时钟应用程序无法卸载,至少在未修改的操作系统中是这样。我正在使用 Android One。我提到过:“它之前也起作用过”,这意味着它实际上可以响应 Intent。
“我的意思是有不能卸载的时钟应用程序,至少在未修改的操作系统中”——根据设备制造商选择的内容,有几十个,如果不是几百个的话航运。在你的情况下,AFAIK,谷歌在 Android One 设备上控制它。您的错误消息是否以堆栈跟踪的形式出现?如果是这样,您可能想要编辑您的问题并包含完整的堆栈跟踪。您可能还想展示您认为您的代码有效的场景,以便我们可以比较和对比哪些对您有效,哪些无效。
" 有几十个,如果不是几百个......" 当我提到它在过去有效时,这对这个问题有什么帮助?当然,我说的是我的案例——我拥有的 Android One Phone。堆栈跟踪中没有错误消息,这是来自应用程序在启动时显示的小弹出窗口(通常显示以选择使用哪个应用程序来完成操作),在帖子中进行了澄清。它工作的代码都是一样的,它只是使用了一个带有 PendingIntent 的 AlarmManager。仍然,补充说。
“当我提到它在过去有效时,这对这个问题有什么帮助?” -- 除非您的应用程序只能在您自己的设备上运行,否则您必须考虑到其他用户将拥有具有不同特征的不同设备。 “这是来自小弹出窗口(通常显示选择使用哪个应用程序来完成操作)” - 这很奇怪。如果真的没有应用程序来处理Intent
,你会因为ActivityNotFoundException
而崩溃。既然你不是,那么正在处理Intent
。
【参考方案1】:
没有应用可以执行此操作。
当您没有设置闹钟所需的权限时会发生这种情况。
来自AlarmClock reference:
希望接收 ACTION_SET_ALARM 和 ACTION_SET_TIMER Intent 的应用程序应该创建一个 Activity 来处理 需要 com.android.alarm.permission.SET_ALARM 权限的 Intent。
请求SET_ALARM
权限:
<mainfest
...
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
</manifest>
【讨论】:
谢谢!这就是问题所在!以上是关于闹钟意图说“没有应用程序可以执行此操作。”的主要内容,如果未能解决你的问题,请参考以下文章
没有应用程序可以执行此操作来打开 Instagram URL