在 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
对应的 scheme
、host
、port
和 path
属性的组合。
在你的情况下,警报确实被触发了,但是 BroadcastReceiver
没有拦截 Intent
。
示例:
<receiver
android:name="com.somedomain.MyReceiver">
<intent-filter>
<data android:scheme="content" />
</intent-filter>
</receiver>
参考文献:
1. <data>
我正在使用此代码来触发意图:
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
对应的 scheme
、host
、port
和 path
属性的组合。
在你的情况下,警报确实被触发了,但是 BroadcastReceiver
没有拦截 Intent
。
示例:
<receiver
android:name="com.somedomain.MyReceiver">
<intent-filter>
<data android:scheme="content" />
</intent-filter>
</receiver>
参考文献:
1. <data>