5

我爲Android 4.0編寫1個應用程序,並通過廣播接收器啓動。我的代碼如下:無法在ICS中接收廣播

在AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" /> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <receiver android:name="com.Android.Exercise.StartUpReceiver" 
      android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED"/> 
       <!--<action android:name="StartInstrument" /> 
       <action android:name="PrintControlName" />  -->  
      </intent-filter> 
     </receiver>   
     <service android:enabled="true" android:name="StartAUT_Service"> 
      <intent-filter> 
       <action android:name="com.Android.Exercise.StartAUT_Service" /> 
      </intent-filter> 
     </service> 
    </application> 

在StartUpReceiver類:

public class StartUpReceiver extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     Log.i("Broadcast", "onReceive"); 

     Intent i = null; 

     if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){ 
      i = new Intent(context, StartAUT_Service.class);   
      i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     } 

     context.startService(i);    
    }  
} 

我重新啓動我的設備後,我無法接收broardcast。 請幫幫我,謝謝這麼多

回答

1

嘗試

<uses-permission android:name="android.intent.action.BOOT_COMPLETED" /> 

低於互聯網的使用許可

+0

儘管我添加了您的標記,但我仍然無法接收廣播命令。在android 2.2中,它可以,但是android 4.0,它不會運行。 – user1266236 2012-03-14 04:17:57

+0

我重新啓動了設備,但仍然無法運行我的broadcast.hix | T_T | – user1266236 2012-03-14 04:20:13

+0

您是否在活動中刪除了該權限標記? – 2012-03-14 04:20:16

7

從Android 3.0的啓動,應用程序的狀態進行了介紹。 現在安裝的所有應用程序的狀態都設置爲非活動狀態,使其所有BroadcastReceivers處於非活動狀態。

要使狀態處於活動狀態,用戶必須至少啓動一次應用程序,操作系統將自動激活應用程序及其所有BroadcastReceivers。

對於您的情況,您需要添加一項活動,無論是許可協議還是幫助頁面。這將爲您的應用程序創建一個圖標,供用戶點擊並激活該應用程序。

請注意,如果用戶強制關閉應用程序,應用程序的狀態將被設置爲非活動狀態。

我遇到了類似的問題:Android ICS not receiving data sms

我希望解決您的問題,或者至少把你在正確的軌道上。

問候, 艾哈邁德

0

你需要做以下操作來克服this安全功能。

如果你的API級別低於12,則進行以下設置你的意圖廣播之前:

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 32); 

否則,添加以下標誌包括被標記爲包停止太:

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent. FLAG_INCLUDE_STOPPED_PACKAGES);