2012-03-13 36 views
-1

我無法啓動服務,當我想在啓動時爲Android 4.0的Android服務啓動服務。 我的代碼如下:在啓動時爲Android 4.0啓動服務

> public class StartUpReceiver extends BroadcastReceiver{ @Override 
> public void onReceive(Context context, Intent intent) {   String 
> action = intent.getAction();  if 
> (action.equalsIgnoreCase("android.intent.action.BOOT_COMPLETED")) { 
>   Intent myIntent = new Intent(context, StartAUT_Service.class); 
>   Log.i("Broadcast", "startService on boot time:." + myIntent); 
>   context.startService(myIntent);   } 
>   } } 



> <uses-permission 
> android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
>  <application android:icon="@drawable/icon" android:label="@string/app_name">   
>   <receiver android:name="com.Android.Exercise.StartUpReceiver" android:exported="false"> 
>    <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> 

而且在logcat中顯示關閉VM當我在上面跑項目,所以我的廣播沒有收到行動。 Plz幫助我。 非常感謝。

回答

1

在你一個BroadcastReceiver類看跌的onResume方法,下面的代碼

public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     super.onReceive(context, intent); 

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

     } 
    } 
+0

感謝您的回覆,我試過了,但它仍然有錯誤, 第一我不能把「super.onReceive」放在這段代碼中(語法錯誤)。 第二次當我複製你的代碼來替換我的代碼時,它仍然不能運行。 – user1266236 2012-03-14 02:40:20

+0

@ user1266236:在設備啓動完成時,我在我的項目中使用了上述代碼來啓動服務。它對我的項目 – Prasad 2012-03-14 05:22:24

2

Mybe這將幫助你:

廣播迴歸證實 在以前的文章中,我列舉的證據表明,BOOT_COMPLETED廣播在用戶使用你的應用程序之前,不會在Android 3.1上使用。 它實際上比這大一些。 在我提出尋求澄清的問題中,Hackborn女士表示: 從安裝應用程序時的3.1開始,它們處於「停止」狀態,因此在用戶明確啓動它們之前,它們將無法運行。按下強制停止會將它們返回到此狀態。因此,首次安裝應用程序時,系統完全忽略它們,除非用戶手動啓動某些內容:最有可能的是單擊啓動程序活動或添加應用程序窗口小部件。 開發者一直依靠獲得某種系統廣播而無需用戶干預,將需要調整他們的Android 3.1應用程序。 正如我在前一篇文章中所寫: 我期望大多數應用程序都可以。例如,如果您的啓動接收器在那裏建立AlarmManager時間表,您還需要在應用程序首次運行時建立該時間表,因此用戶無需重新啓動手機即可設置鬧鐘。該模式不會改變 - 只是如果用戶重新啓動手機,它將不會設置您的鬧鐘,直到用戶執行其中一項活動。 更新:爲了澄清上述報價,一旦用戶第一次運行應用程序(並且不強制停止它),一切都會像以前一樣運行 - 重新啓動將導致BOOT_COMPLETED廣播被接收等等。但是,如果用戶安裝了該應用程序,那麼除非他們手動運行該應用程序,否則不會收到廣播。如果用戶強制停止應用程序,直到並且除非他們手動運行應用程序,否則不會收到廣播。 這一變化並不令人震驚,因爲它通過限制惡意軟件在沒有用戶知識的情況下可以運行的方式來增強安全性。雖然它不提供完美的安全性 - 但惡意軟件仍然可以安裝它自己的「憤怒的小鳥」發射器圖標,並希望用戶搞砸 - 這是一種改進。

+1

工作正常該報價的來源是什麼? – oers 2012-10-11 12:45:18