2017-09-02 404 views
2

我瞭解服務等,因此我的接收器已停止在Android Oreo中工作。接收器在Oreo停止接收

我有這樣的代碼啓動服務 -

Intent intent = new Intent(this, MyService.class); 
intent.putExtra("Time", locationUpdatesTime); 
intent.putExtra("Dist", locationUpdatesDistance); 
startService(intent); 

我有這個在我的服務 -

Intent intent = new Intent(); 
intent.setAction("com.androidandyuk.laptimerbuddy"); 
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); 
intent.putExtra("Lat", thisLat); 
intent.putExtra("Lon", thisLon); 

sendBroadcast(intent); 

但我的接收器永遠不會被調用。經過四處搜索,我認爲我必須註冊我的接收器,但我無法確定如何使用正確的語法對其進行編碼。任何人都可以幫忙嗎?

如果你想讓我失望,如果你想評論爲什麼,我會很感激,所以我可以學習,因爲我找到了答案,找不到/理解它,我想我已經提出了問題因爲我應該:-)

非常感謝!

UPDATE嘗試使用LocalBroadcastManager。

在MainActivity我有 -

BroadcastReceiver mMessageReceiver; 

的onCreate我有 -

mMessageReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      // Get extra data included in the Intent 
      String message = intent.getStringExtra("message"); 
      Log.i("receiver", "Got message: " + message); 
     } 
    }; 
    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("custom-event-name")); 

在我的服務,onLocationChanged

Log.i("sender", "Broadcasting message"); 
       Intent intent = new Intent(); 
       intent.setAction("custom-event-name"); 
       intent.putExtra("message", "This is my message!"); 

LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent); 

這個工程,我看到發送者的消息。

我在做什麼錯?

+1

接受隱含意圖

你仍然可以得到明確的意圖和一些特殊的暗示行動,boot_completed或locale_changed例如

更多信息,請給一個[MCVE。 –

+1

清單註冊的接收器不能接收隱含的「Intents」的廣播。如果你的發送者和接收者在同一個應用程序和同一個進程中,停止使用系統廣播('Context「上的'sendBroadcast()'和'registerReceiver()')。相反,使用'LocalBroadcastManager'。這不僅可以讓你過去Android 8.0的變化,還可以提高速度和安全性。但是,正如Code-Apprentice所建議的那樣,請說明您是如何註冊該接收器的。 – CommonsWare

+0

我之前沒有註冊過接收器......我不認爲?但它在奧利奧之前就有效了。我試圖通過遵循其他代碼來學習,所以只有逐漸瞭解我在做什麼你看到。我試圖按照這個 - https://stackoverflow.com/questions/8802157/how-to-use-localbroadcastmanager但我的服務沒有上下文,我認爲這是爲什麼它不工作? – AndyCr15

回答