2013-05-01 49 views
0

在實際應用中的主要活動我startService:不能「startActivity」,從服務,而主要活動停止

startService(new Intent(MainActivity.this, BluetoothService.class).putExtra("address", address)); 

其建立與PC藍牙連接。然後,我按下android手機上的主頁按鈕,主要活動將變爲背景。我從PC發送呼叫命令到手機和調試結果表明,業務的正常收到該命令,並試圖撥打:

String[] splits = parameters.split("\\|"); 
String number = splits[0]; 

Intent intent = new Intent(Intent.ACTION_CALL); 
intent.setData(Uri.parse("tel:" + number)); 
ConnectionManager.getInstance().GetMainActivity().startActivity(intent); 

但呼叫活動只有午飯時,我在屏幕上顯示的主要活動。

在清單:

<service android:name="BluetoothService" > 

我試圖使用Android:過程= 「:newThread」 的標籤,但服務於行墜毀

ConnectionManager.getInstance().GetMainActivity().startActivity(intent); 

我也不能調試服務時,它不同的過程。

編輯://///////////////////////////////////

我有一個問題,我從簡單的類開始活動:

class Command_call_impl implements CommandImpl 
{ 
    public void Execute(String parameters) 
    { 
     String[] splits = parameters.split("\\|"); 
     String number = splits[0]; 

     Intent intent = new Intent(this, MainActivity.class); 
     intent.putExtra("phone_number", number); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     ConnectionManager.getInstance().GetMainActivity().startActivity(intent); 
    } 
} 

並且無法初始化Intent。看來eclipse無法識別MainActivity,但它在相同的包中。

編輯://///////////// 我以這樣的方式開始活動:

Intent intent = new Intent(); 
    intent.setClass(ConnectionManager.getInstance().GetMainActivity().getBaseContext(), MainActivity.class); 
    intent.putExtra("phone_number", number); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    ConnectionManager.getInstance().GetMainActivity().startActivity(intent); 

但onNewIntent稱爲只有當mainActivity有效。我也嘗試過FLAG_ACTIVITY_SINGLE_TOP鍵。

編輯:

Intent intent = new Intent(ConnectionManager.getInstance().GetMainActivity().getBaseContext(), MainActivity.class); 
    intent.putExtra("phone_number", number); 
    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
    ConnectionManager.getInstance().GetMainActivity().getApplication().startActivity(intent); 

    Intent intent2 = new Intent(ConnectionManager.getInstance().GetMainActivity().getBaseContext(), MainActivity.class); 
    intent2.putExtra("phone_number", number); 
    intent2.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
    ConnectionManager.getInstance().GetMainActivity().getApplication().startActivity(intent); 

我想:雙啓動同一活動後//////////////////////

問題解決了第一個意圖顯示活動和第二個開始呼叫活動。有趣的是,如果我從第一個意圖中刪除intent.putExtra(「phone_number」,數字),它不起作用。它非常好奇。

當屏幕關閉時也不會調用。

+0

你試着打個電話或具有MainActivity撥打電話? – 2013-05-01 17:59:21

+0

是的,當主要活動顯示在屏幕上時,電話工作。 – IKM2007 2013-05-01 18:02:06

回答

0
class Command_call_impl implements CommandImpl 
{ 
private Context mContext; 

    public Command_call_impl(Context context) 
    { 
     mContext = context; 
    } 

    public void Execute(String parameters) 
    { 
     String[] splits = parameters.split("\\|"); 
     String number = splits[0]; 

     Intent intent = new Intent(mContext, MainActivity.class); 
     intent.putExtra("phone_number", number); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     mContext.startActivity(intent); 
    } 
} 

在您的MainActivity覆蓋onNewIntent

@Override 
protected void onNewIntent(Intent intent) 
{ 
    super.onNewIntent(intent); 

    String phoneNumber = intent.getStringExtra("phone_number"); 
    if (phoneNumber != null) 
    { 
     Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phone)); 
     //callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(callIntent); 
    } 
} 
+0

請參閱編輯在主帖 – IKM2007 2013-05-01 18:43:14

+0

爲什麼你不只是發送命令到您的服務的號碼來調用,然後讓服務實現上面的代碼 – 2013-05-01 18:47:57

+0

是類Command_call_impl實現CommandImpl服務類中的內部類? – 2013-05-01 18:49:52