如何检查邻近警报并找到它们

  • 本文关键字:何检查 android proximity
  • 更新时间 :
  • 英文 :


我有一个关于接近警报的问题。 在我读过的所有教程中,它们是在创建它们的活动仍在运行时创建和销毁的。 但是,如果说一个活动创建了 n 个邻近警报,然后活动本身被破坏(PA 不是),会发生什么情况

然后,如果我想构建另一个活动来查找这些邻近感应警报,我该怎么做?这可能吗?

您必须维护自己的邻近警报列表。没有办法让他们回来。但是,当他说您可以仅使用挂起的意图删除 PA 时,@Mercato是正确的,但您不必存储它们。根据文档:

悬而未决的意图本身只是对系统维护的令牌的引用,该令牌描述了用于检索它的原始数据。这意味着,即使其所属应用程序的进程被终止,PendingIntent 本身仍将可用于已赋予它的其他进程。如果创建应用程序稍后重新检索相同类型的 PendingIntent(相同的操作、相同的 Intent 操作、数据、类别和组件以及相同的标志),它将收到表示相同令牌的 PendingIntent(如果该令牌仍然有效),因此可以调用 cancel() 将其删除。

这意味着系统将在应用重启之间为您存储PendingIntent,您可以通过传递用于创建它的相同Intent来检索它。例如,如果您创建了以下PendingIntent

Intent intent = new Intent(context, Foo.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);

然后,您只需存储requestId(1)和Class或类名(Foo.classFoo.class.getName())。然后,如果要在不创建新PendingIntent的情况下检索同一,则可以执行以下操作:

Class<Foo> className = retrieveClass(); //You implement this
//String clazz = retrieveClassName(); //This is another option
int requestId = retrieveId(); //You implement this
Intent intent = new Intent(context, className);
//The flag given attempts to retrieve the PendingIntent if it exists, returns null if it doesn't.
PendingIntent pi = PendingIntent.getBroadcast(context, requestId, intent, PendingIntent.FLAG_NO_CREATE);
if (pi != null) {
//This pending intent was registered once before. 
//Go ahead and call the function to remove the PA. Also, go ahead and call pi.cancel() on this.
}
else {
//This pending intent was not registered, and therefore can't have a PA registered to it. 
} 

从技术上讲,所有邻近警报都需要定义一个PendingIntent并将其用作参数。Android的文档显示,如果您知道PendingIntent的列表,那么您也可以删除它们。

删除邻近警报(挂起的意图意图) 删除邻近警报 具有给定的待定意图。

由于PendingIntentParecelable在此处看到,因此您可以将其作为Extra添加到任何Intent。这意味着,在启动另一个活动时,您可以创建一个Parcelable[]数组来保存所有这些PendingIntent,然后

putExtra(字符串名称,可包裹[] 值) 向目的添加扩展数据。

然后通过getIntent()及其相关方法在下一个活动中检索它们。

相关内容

  • 没有找到相关文章

最新更新