在 Android、intent.setData(Uri) 中导致 AlarmManager 不触发

in Android, intent.setData(Uri) causes AlarmManager to not fire

我正在使用此代码来触发意图:

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

Intent intent = new Intent(MY_ACTION);
Uri myUri = Uri.parse("content://myapp.name.provider/triggerassignablepairs/10");
intent.setData(myUri);

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 10, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+10000, pendingIntent); //set it to 10 sec after current time

在这种形式下,警报不会触发。

但是,如果我省略 intent.setData(my_obj.uri) 它就会触发,然后它就会触发。 这是正常现象吗,有什么办法可以解释吗?

关于如何解决这个问题有什么建议吗?我对包含 uri 的兴趣既是为了从我的 ContentResolver 中检索数据库条目(我可以使用 intent.putExtras ),也是为了将特定警报与将引用其他警报的其他警报区分开来数据库条目。

当您使用 setData() 方法将 Uri 添加到 Intent 时,您需要在您的 intent-filter 中添加 <data> 标签BroadcastReceiver 在应用程序清单中,并指定与 Uri 对应的 schemehostportpath 属性的组合。

在你的情况下,警报确实被触发了,但是 BroadcastReceiver 没有拦截 Intent

示例:

<receiver
    android:name="com.somedomain.MyReceiver">

    <intent-filter>
        <data android:scheme="content" />
    </intent-filter>

</receiver>

参考文献:

1. <data>

2. Intent <data> Test.