我的應用程序使用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'。 –