我的应用程序使用BroadcastReceiver
与Geofencing API
。当用户输入Geofence
时,将调用BroadcastReceiver
。Android BroadcastReceiver的onReceive有时不叫
昨天,代码工作完美无瑕。该BroadcastReceiver
检测我进入地理栅栏,我周围设置我的地方这段代码:
builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER);
的Geofence
setExpirationDuration(Geofence.NEVER_EXPIRE)
和radius
是1609
仪表(1英里)
今天,我卸载该应用程序并运行完全相同的代码再次,在相同的计算机和相同的设备。我偶然发现我的BroadcastReceiver
的onReceive
从来没有被调用。
我检查了互联网连接,这很好。我试图clean
,rebuild
和make project
上android studio
和手动卸载APK
之前运行android studio
但BroadcastReceiver
仍然无法正常工作。
还有很重要的一点,我发现:
的breakpoint
我把里面的onReceive
启用(纯红色),但无效(红色标记)。这是我的意思是link。
昨天(时完全相同的代码工作)时,断点是有效。
然后我试着用IntentService
而不是BroadcastReceiver
(我会在后面的问题中分享他们两人的代码)。 IntentService
被称为,因此我的PendingIntent
正在工作。
之后,我试着再次使用BroadcastReceiver
,BroadcastReceiver
与昨天完全一样。现在,有时候BroadcastReceiver
有时不会被调用。
奇怪的部份是我需要改变PendingIntent
到IntentService
每次我BroadcastReceiver
不工作,使我BroadcastReceiver
重新开始工作。
而且一旦它再次开始工作,BroadcastReceiver
仍然称为更小(250米)radius
。所以我认为radius
不是问题。
我试着调试onReceive
,发现的breakpoint
必须valid
(不只是enabled
),使我的工作BroadcastReceiver
。换句话说,如果断点只是enabled
(而不是valid
),那么将永远不会调用onReceive
。
这是我如何调用BroadcastReceiver
:
Intent intent = new Intent("mypackage.ACTION_RECEIVE_GEOFENCE");
PendingIntent geofencePendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
LocationServices.GeofencingApi.addGeofences(
mGoogleApiClient,
getGeofencingRequest(),
geofencePendingIntent
).setResultCallback(this);
这也是我如何调用IntentService
:
Intent intent = new Intent(this, GeofenceUpdateService.class);
PendingIntent geofencePendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
LocationServices.GeofencingApi.addGeofences(
mGoogleApiClient,
getGeofencingRequest(),
geofencePendingIntent
).setResultCallback(this);
,这是我manifest
,同时包含的IntentService
和BroadcastReceiver
:
<service android:enabled="true" android:name="mypackage.GeofenceUpdateService" />
<receiver android:name="mypackage.GeofenceUpdateReceiver"
android:exported="false">
<intent-filter >
<action android:name="mypackage.ACTION_RECEIVE_GEOFENCE"/>
</intent-filter>
</receiver>
我不要发帖onReceive
或onHandleIntent
因为问题不在这些代码里面,但是为什么这些方法有时候不叫。
如何使我的BroadcastReceiver
工作更稳定? (总是在工作)
或者是否有任何解决方法?我应该用IntentService
来代替吗?
非常感谢您的时间
全新安装的应用程序后,你有没有手动启动应用程序?有时候,如果你不首先启动应用程序,它不会工作。 –
感谢您的回复。这些应用程序会自动运行,因为我从'android studio'运行它,我的意思是'手动'是我从'android studio'运行新的''之前卸载旧的'APK'。 –