2012-06-30 149 views
0

無該廣播接收機不會被觸發,但在我的另一個應用程序的工作,我用來檢查網絡狀態。我沒有別的可以說這個問題。廣播接收器不工作

package monitor; 

import android.content.BroadcastReceiver; 

public class Monitor extends BroadcastReceiver { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      System.out.println("jupi"); 
    } 
} 



<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="monitor" 
    android:versionCode="1" 
    android:versionName="1.0"> 
<uses-sdk 
    android:minSdkVersion="9" 
    android:targetSdkVersion="15"/> 

<uses-permission android:name="android.permission.RECEIVE_SMS"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name"> 
    <service 
     android:name=".MonitorService"> 
    </service> 
    <receiver 
     android:name=".Monitor"> 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
      <action android:name="android.intent.action.PHONE_STATE" /> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 

</application> 

+0

不知道,但給這個在您的清單<使用許可權的android:NAME =「android.permission.ACCESS_NETWORK_STATE」 /> – rajpara

+0

有任何的logcat錯誤或消息? – rajpara

+0

在1.評論:它已經表明了這一權限。在2註釋:在日誌貓從該應用程序 –

回答

5

如果您看到此行爲在Android 3.1或更高版本,你可能看到這種變化的結果:

http://developer.android.com/about/versions/android-3.1.html#launchcontrols

尤其是這樣說的:

注意,系統將FLAG_EXCLUDE_STOPPED_PACKAGES所有 廣播意圖。它這樣做是防止廣播與背景 服務從無意或不必要地啓動的 stoppped應用程序的組件。

由於您的應用程序只包含一個服務,接收器,用戶將不會開始這個應用程序,因此,如果將保持在「停止」狀態,防止它看到任何廣播意圖。

當您添加活動到您的應用程序,運行它一次足以從「停止」狀態刪除的應用程序,使您的接收器然後有資格接收廣播意圖。您實際上不需要動態註冊接收器。只需讓用戶在安裝後「啓動」應用程序就足夠了。