2016-02-13 97 views
0

我想創建一個沒有UI的後臺應用程序。 所以,我有一個廣播接收器,我試圖從清單註冊它。這是我在我的清單中所做的:如何註冊Manifest的廣播接收器?

<receiver 
     android:name="background.broadcastReceivers.GPSStartedReceiver"> 

     <intent-filter android:priority="100"> 
      <action 
       android:name="android.location.PROVIDERS_CHANGED" 
       android:enabled="true"/> 
     </intent-filter> 
</receiver> 

但是,當我運行應用程序時,廣播接收器永遠不會被註冊。 當我從測試活動註冊接收器時,它工作正常。 爲什麼會發生這種情況?

這是我的測試活動中做:

private GPSStartedReceiver receiver = new GPSStartedReceiver(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Register a broadcast receiver which listens to GPS provider changes 
     this.registerReceiver(receiver, 
       new IntentFilter("android.location.PROVIDERS_CHANGED")); 
    } 
+0

你在做什麼工作可行? –

+0

我編輯了問題 – Manos

回答

3

我想創建一個沒有UI的後臺應用程序。

這是不實際的。

但是,當我運行應用程序時,廣播接收器永遠不會被註冊。當我從測試活動註冊接收器時,它工作正常。爲什麼會發生這種情況?

清單註冊的接收器在安裝時不起作用。他們僅在使用明確的Intent啓動應用程序的某個組件之後才能工作。對於99.9%的應用程序,這是他們的主屏幕啓動器活動。

+0

謝謝!我可以從另一個應用程序註冊接收器嗎? – Manos

+0

@Manos:我不太確定你爲什麼將它分成兩個應用程序。話雖如此,歡迎其他應用程序發送廣播或在您的非UI應用程序中使用明確的「Intent」啓動服務。當它檢測到您的非UI應用程序已安裝時,可能會這樣做。此時,您的無UI應用程序的清單註冊接收器將工作。 – CommonsWare

+0

我在分裂它,因爲它是我大學的一個項目,我被要求。否則我不會分裂,除了練習之外,我看不到任何理由。 – Manos

0

我寫了一個很小的應用程序具有以下清單項:

<receiver android:name="test.Receiver"> 
    <intent-filter> 
     <action android:name="android.location.PROVIDERS_CHANGED"/> 
    </intent-filter> 
</receiver> 

而且test.Receiver類:

package test; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 

public class Receiver extends BroadcastReceiver { 

    @Override 
     public void onReceive(Context context, Intent intent) { 
      Log.d("@@@", "here"); 
     } 
    } 

當我在設備上切換GPS時,會打印我的日誌消息。也許你的清單XML有太多額外的東西呢?

+0

我已經創建了接收器類,但它不起作用。問題在於註冊。如果沒有活動,我無法註冊接收器。 – Manos

+0

您是否嘗試過我建議的內容,並使用上述示例創建了一個簡單的測試應用程序? –

+0

是的。 CommonsWare已經給出了問題的答案。一探究竟。你也可以知道它! :D – Manos

相關問題