2010-03-19 37 views
8

我有一個已經構建的應用程序,我想添加一個功能,當通話結束時必須啓動。 我該如何做到這一點? 我認爲,在我的清單像這樣意圖在通話結束時被解僱?

<activity android:name="Filter"> 
    <intent-filter> 
      <category android:name="android.intent.SOMETHING" /> 
    </intent-filter> 
</activity> 

聲明可能是不夠的,但我有什麼樣的Intent提上了過濾器?

查看文檔,我發現只有意圖檢測何時開始呼叫。

我正在尋找可能嗎?

回答

16

您可以使用PhoneStateLisenter來偵聽呼叫狀態的變化。

因此,您傾聽LISTEN_CALL_STATE更改。

onCallStateChanged方法。

所以,當從摘機狀態變爲空閒時啓動應用程序

+1

嗯......我希望即使當我的應用程序沒有啓動時,這個意圖也能被捕獲,就像廣播意圖一樣。 這可能嗎? – lbedogni 2010-03-19 14:47:41

+0

沒有系統意圖,我相信你可以創建一個小型服務,在後臺運行,監聽呼叫狀態的變化,以及當它從OFFHOOK變爲IDLE時,發送一個自定義的意圖來啓動你的應用程序 – 2010-03-19 14:53:21

+0

認爲這可能是一個很好的想法謝謝。 – lbedogni 2010-03-19 17:47:20

20

我一直在使用的廣播接收器做到了這一點。作品!代碼如下 -

AndroidManifest.xml中

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.gopi" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WRITE_CONTACTS" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 

     <receiver android:name=".IncomingCallTracker"> 
      <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE" /> 
      </intent-filter> 
     </receiver> 

    </application> 
</manifest> 

的IncomingCallTracker代碼片段看起來像 -

public class IncomingCallTracker extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Bundle bundle = intent.getExtras(); 

      Set<String> keys = bundle.keySet(); 
     for (String key : keys) { 
       Log.i("MYAPP##", key + "="+ bundle.getString(key)); 
     }  
    } 

} 

你可以看看在包的密鑰 '國家'。當其值爲'IDLE'時,表示呼叫已結束,您可以根據此操作執行任何您想要的操作。