在Android中,intent.setData(Uri)导致AlarmManager无法触发

时间:2015-03-24 14:11:02

标签: android android-intent alarmmanager android-broadcast android-alarms

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

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)中检索数据库条目,也可以将特定警报与将引用其他警报的其他警报区分开来。数据库条目。

1 个答案:

答案 0 :(得分:0)

使用Uri方法向Intent添加setData()时,您需要在<data> intent-filter中添加BroadcastReceiver标记1}}在应用清单中,并指定与scheme对应的hostportpathUri属性的组合。

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

示例:

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

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

</receiver>

<强>参考文献:

1。 <data>

2。 Intent <data> Test