2013-06-25 62 views
0

我在後臺運行我的應用程序以獲取每1小時的位置。我也把代碼讀取手機狀態如下:通話結束後的應用程序開始

public class IncomingCallInterceptor extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
     String msg = "Phone state changed to " + state; 

     if (TelephonyManager.EXTRA_STATE_RINGING.equals(state)) { 
      String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 
      msg += ". Incoming number is " + incomingNumber; 


      // TODO This would be a good place to "Do something when the phone rings" ;-) 
     } 

     if (TelephonyManager.EXTRA_STATE_IDLE.equals(state)){ 
      Intent i = context.getPackageManager() 
        .getLaunchIntentForPackage(
          context.getPackageName()); 
      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
        | Intent.FLAG_ACTIVITY_CLEAR_TOP 
        | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      context.startActivity(i); 
     } 

    } 
} 

它的工作正常,當我的應用程序正在運行和任何電話來。在通話結束後,它回到我的申請。但主要問題是當我的應用程序沒有運行,並且任何電話來電和通話結束後,我的應用程序自動啓動。我認爲理由是我在後臺運行我的應用程序,這就是爲什麼它自動啓動。但它必須在後臺運行。那麼當應用程序沒有正常運行時,在通話結束後,停止我的應用程序的解決方案是什麼?

+0

解釋爲什麼你失望投我的問題... – Riser

+0

你不想接收broadcasat當應用程序沒有運行? – stinepike

+0

我的應用程序在後臺運行已經.. – Riser

回答

0

您的應用程序在電話呼叫結束後再次被呼叫,因爲TelephonyManager將始終監聽電話的呼叫狀態,並且當呼叫結束時它將進入空閒狀態..經過一段時間再次呼叫相同的空閒狀態,以便您的APP剛打開。 。嘗試使用布爾什麼

boolean currentState=false; 

then in OFFHOOK make it true and when first time goes in a idle state make it ture 

,並在空閒狀態下

if(currentState) 
    { 
    //open APP 
    currentState=false; 
    } 
+0

不,不是這樣。 。 – Riser

+0

打印日誌並進行調試 –

相關問題