2012-03-07 61 views
0

以下是我的啓動服務的代碼。Android4.0服務已啓動

public class MyStartupIntentReceiver extends BroadcastReceiver 
{ 
public void onReceive(Context context, Intent intent) 
{ 
    Intent callService = new Intent(); 
    callService.setAction("com.xxxx.yyyy.services.StartServiceActivity"); 
    context.startService(callService); 
} 
} 

在manifest文件中,我定義瞭如下的廣播接收器。

<receiver android:name=".MyStartupIntentReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"  
/>    
</intent-filter> 
</receiver> 

進出口申報業務一樣。一旦用戶從我的活動開始了我的應用即時通訊開始服務清單文件

<service android:name=".services.CallService"> 
    <intent-filter> 
      <action    
      android:name="com.xxxx.yyyy.services.StartServiceActivity" /> 
    </intent-filter> 

    </service> 

以下

serviceIntent = new Intent(SplashScreen.this, StartServiceActivity.class); 
getApplicationContext().startService(serviceIntent); 

問題是服務工作的罰款與android2。 3.5 SDK設備。但不適用於4.0設備。我的代碼有任何問題。請幫我解決。

回答

0

我從網上找到一個文章,希望它可以幫助ü:

廣播迴歸確認

在以前的文章中,我列舉的證據表明,BOOT_COMPLETED廣播不會開箱工作的Android 3.1直到用戶使用您的應用程序。

它實際上比這大一些。

在我提起訴訟,尋求澄清的問題,Hackborn女士表示:

與3.1開始時,應用程序安裝它們處於「停止」狀態,所以他們將無法運行,直到用戶明確啓動他們。按下強制停止會將它們返回到此狀態。因此,在第一次安裝應用程序時,系統完全忽略它們,除非用戶手動啓動某些內容:最有可能的是單擊啓動器活動或添加應用程序窗口小部件。

開發人員一直依靠獲得某種系統廣播而無需用戶干預將需要調整他們的Android 3.1應用程序。

正如我在以前的文章中寫道:

我期望大多數的應用程序都會好的。例如,如果您的啓動接收器在那裏建立AlarmManager時間表,您還需要在應用程序首次運行時建立該時間表,因此用戶無需重新啓動手機即可設置鬧鐘。該模式不會改變 - 只是如果用戶重新啓動手機,它將不會設置您的鬧鐘,直到用戶執行其中一項活動。

更新:爲了澄清上述報價,一旦用戶第一次運行應用程序(並且不強制停止它),一切都會像以前一樣運行 - 重新啓動將導致BOOT_COMPLETED廣播被接收等等。但是,如果用戶安裝應用程序,直到手動運行應用程序,並且不會收到廣播。如果用戶強制停止應用程序,直到手動運行該應用程序,並且不會收到廣播。 這一變化並不令人震驚,因爲它通過限制惡意軟件在沒有用戶知識的情況下可以運行的方式來增強安全性。雖然它不提供完美的安全性 - 但惡意軟件仍然可以安裝它自己的「憤怒的小鳥」發射器圖標,並希望用戶搞砸 - 這是一種改進。