2012-01-17 79 views
0

我正在執行一個應用程序,在該設備啓動完成時我要調用一個數字。我的代碼是這樣的:設備啓動完成時啓動服務

@Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     System.out.println("**inside onRecevier"); 

     Intent serviceIntent = new Intent(); 
     serviceIntent.setAction("com.test.app.TestService"); 
     context.startService(serviceIntent); 

    } 

首先我創建了BroadcastReceiver。我註冊了這個接收器清單文件是這樣的:

<receiver android:name="TestReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <category android:name="android.intent.category.HOME" /> 
     </intent-filter>  
    </receiver> 

在接收機中我叫下面的服務:

public class TestService extends Service{ 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 

     System.out.println("**inside onCreate"); 
     super.onCreate(); 
     Toast.makeText(this, "Service Created", Toast.LENGTH_LONG).show(); 
     Intent call = new Intent(Intent.ACTION_CALL,Uri.parse("tel:+5555")); 
     startActivity(call); 
    } 

    @Override 
    public void onDestroy() { 
     // TODO Auto-generated method stub 

     System.out.println("**inside onDestroy"); 
     super.onDestroy(); 
     Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onStart(Intent intent, int startId) { 
     // TODO Auto-generated method stub 
     System.out.println("**inside onStart"); 
     super.onStart(intent, startId); 
     Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); 
    } 

} 

,當我試圖啓動應用越來越強制關閉後啓動的設備。如何在android中做到這一點? Thanx提前

+1

請張貼異常的描述和堆棧跟蹤。 – Ash 2012-01-17 15:30:40

回答

1

你需要從服務開始活動之前增加NEW_TASK標誌:

Intent call = new Intent(Intent.ACTION_CALL,Uri.parse("tel:+5555")); 
call.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(call); 

This解釋說:

需要注意的是,如果這種方法被從活動 內容以外稱爲,那麼意圖必須包括FLAG_ACTIVITY_NEW_TASK 啓動標誌。這是因爲,沒有從現有的 活動啓動,因此不存在將新活動 置於其中的任務,因此需要將其放置在其自己的單獨任務中。

而且,你必須持有的權限:

而作爲Waqas提到,這將是更好地爲您從您的onReceive像開始爲您服務:

Intent serviceIntent = new Intent(context, TestService.class); 
context.startService(serviceIntent); 

請確保你已經完成了我所說的所有事情,如果你仍然有問題,那麼如果你編輯你的問題並從強制關閉粘貼logcat將會很有幫助。

0

改變你的onReceive這個

@Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     System.out.println("**inside onRecevier"); 

     Intent serviceIntent = new Intent(context, TestService.class); 
     context.startService(serviceIntent); 

    } 
0

有各種各樣的原因,你會得到一個強制關閉。告訴哪些是查看日誌的最好方法。它應該告訴你究竟拋出了什麼異常,並告訴你如何解決問題。

+0

這不是一個真正的答案,更應該作爲問題的評論發佈。 – Jakar 2012-01-17 15:33:44