1

我想知道当您从主要活动中创建广播接收器(在我的情况下为接近警报接收器)时会发生什么,并且应用程序进程由于某种未知原因而被终止?

我希望在我注册的广播接收器中接收我的接近警报,无论我的应用程序状态如何,这会发生还是我需要做一些特别的事情来确保这一点?

编辑澄清:

我必须从我的应用程序中注册接收器,而不是通过清单。由于我想要多个邻近警报,因此对于每个(不同的)位置,我将需要动态创建接收器,因为我需要为每个位置注册接收器,但不幸的是,它具有唯一的 ID。

创建我的意图/待定意图/广播接收器的代码:

    double latitude = location.getLat();
    double longitude = location.getLon();
    Intent intent = new Intent(PROX_ALERT_INTENT_ID);
    PendingIntent proximityIntent = PendingIntent.getBroadcast(activity.getApplicationContext(), 0, intent, 0);
    lm.addProximityAlert(
        latitude, // the latitude of the central point of the alert region
        longitude, // the longitude of the central point of the alert region
        POINT_RADIUS, // the radius of the central point of the alert region, in meters
        PROX_ALERT_EXPIRATION, // time for this proximity alert, in milliseconds, or -1 to indicate no                           expiration
        proximityIntent // will be used to generate an Intent to fire when entry to or exit from the alert region is detected
    );

    IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT_ID);

    activity.registerReceiver(new ProximityIntentReceiver(location), filter);
4

2 回答 2

3

如果您希望BroadcastReceivers无论您的应用程序处于何种状态都可以触发,那么您应该通过您的应用程序AndroidManifest.xml文件注册它们。

下面是如何做到这一点。

  1. 定义一个扩展BroadcastReceiver并实现该onReceive()方法的类。我看到你已经这样做了 -ProximityIntentReceiver是那个班级。

  2. 在您的 AndroidManifest.xml 文件中添加:

    <application>
    ...
        <receiver
            android:name=".MyReceiver"
            android:exported="false" >
            <intent-filter>
                   <action android:name="my.app.ACTION" />
            </intent-filter>
        </receiver> 
    </application>
    

MyReceiver您的接收器类的名称在哪里(ProximityIntentReceiver在您的情况下), my.app.ACTION 是您的接收器将侦听的操作(在您的情况下,我猜它是 的值PROX_ALERT_INTENT_ID)。

注意:说你的接收者的名字是.MyReceiver假设它位于你的应用程序的根包中。如果不是这种情况,那么您需要提供从根目录开始的该类的路径。

于 2012-12-29T11:16:26.780 回答
0

@Mathias:我动态注册广播接收器并且即使在应用程序被终止时也处于活动状态的方式是通过运行服务并从那里注册接收器。希望能帮助到你。

于 2015-08-02T23:22:54.493 回答