2011-05-17 8 views
10

を取得することができ -ない私はこれが私のマニフェストファイルで追加TelephonyManager.CALL_STATE_RINGING

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

<uses-permission android:name="android.permission.READ_PHONE_STATE"> 
</uses-permission> 

その後、私のサービスクラスは、このようなものです -

public class ServiceReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    MyPhoneStateListener phoneListener = new MyPhoneStateListener(); 
    TelephonyManager telephony = (TelephonyManager) context 
      .getSystemService(Context.TELEPHONY_SERVICE); 
    telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); 
} 

}

と私のPhoneStateListenerです -

public class MyPhoneStateListener extends PhoneStateListener { 

public void onCallStateChanged(int state, String incomingNumber) { 
    Log.i("telephony-example", "State changed: " + stateName(state)); 
} 

String stateName(int state) { 
    switch (state) { 
    case TelephonyManager.CALL_STATE_IDLE: 
     Log.d("DEBUG", "***********IDLE********"); 
     return "Idle"; 
    case TelephonyManager.CALL_STATE_OFFHOOK: 
     Log.d("DEBUG", "***********OFFHOOK********"); 
     return "Off hook"; 
    case TelephonyManager.CALL_STATE_RINGING: 
     Log.d("DEBUG", "***********RINGING********"); 
     return "Ringing"; 
    } 
    return Integer.toString(state); 
} 

}

私はIDLE状態を見ることができます。

しかし、私は私がリンギング状態を取得しないでください。どうして?

答えて

14

私は電話の状態を取得する2つのアプローチを混在させていると思います。インテントフィルターとブロードキャストレシーバーを使用する場合は、レシーバーでTelephonyManagerのlisten()を呼び出す必要はありません。ただ、このような受信意図チェック:

public void onReceive(Context context, Intent intent) { 
    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
    String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 
    if (TelephonyManager.EXTRA_STATE_RINGING.equals(state)) 
    { 
     Log.d("MPR", "Its Ringing [" + number + "]"); 
    } 
    if (TelephonyManager.EXTRA_STATE_IDLE.equals(state)) 
    { 
     Log.d("MPR", "Its Idle"); 
    } 
    if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(state)) 
    { 
     Log.d("MPR", "Its OffHook"); 
    } 
} 
+0

感謝を... :)リンギング はところであなたはその後、電話が鳴ると、アプリに戻ったときに、それは私のアプリを一時停止させる方法を知っている得たときに電話終わった? – nasaa

+1

AFAIK、あなたのアプリがアクティビティを実行している場合は、onPauseとonStopが呼び出され、電話アクティビティが前面に表示されます。あなたがサービスを実行しているなら、あなたがやっている仕事を一時停止したい理由は分かりません。それでもあなたが上記の方法を使用して電話が鳴っていることを知りたい場合は、アプリケーションのロジックに応じて作業をやめ、後で再開しますが、サービスからその理由を知ることはできません! – advantej

+0

よく問題は私が歌を演奏していることですが、電話が鳴ったときにそれが止まらないので私は尋ねました。 – nasaa

関連する問題