2011-07-10 17 views
1

ブロードキャスト受信者を使用して着信を受信しようとしています。私は、通話が終了したときに通話を登録したい。以下のコードは、同じ番号(過去の呼び出しの問題ではありません)で、各状態(アイドル状態、リンギング状態のオフフック)を複数回表示します。それはphonestatelistnerがサービス内で呼ばれているからです。ブロードキャスト受信者とphonestatelistener

public class IncomingCallReceiver extends BroadcastReceiver { 

int stateString =0; 
int prevStat = 0; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
      Bundle bundle = intent.getExtras(); 

      if(null == bundle) 
        return; 

      String state = bundle.getString(TelephonyManager.EXTRA_STATE); 

      if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)) 
      { 
        String phonenumber = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 

        String info = "Detect Calls sample application\nIncoming number: " + phonenumber; 

        Toast.makeText(context, info, Toast.LENGTH_LONG).show(); 
      } 

      TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
      //CustomPhoneStateListener customPhoneListener = new CustomPhoneStateListener(); 

      PhoneStateListener listener = new PhoneStateListener() { 

      @Override 
       public void onCallStateChanged(int state, String incomingNumber) { 
        String p = incomingNumber; 
        switch (state) { 
        case TelephonyManager.CALL_STATE_IDLE: 
        prevStat = stateString; 
        stateString = 1; 
        Log.i("ON CALL STATE CHANGED","IDLE"); 
        break; 
        case TelephonyManager.CALL_STATE_OFFHOOK: 
        Log.i("ON CALL STATE CHANGED","OFFFHOOK"); 
        prevStat = stateString; 
        stateString = 2; 
        break; 
        case TelephonyManager.CALL_STATE_RINGING: 
        prevStat = stateString; 
        stateString = 3; 
        Log.i("ON CALL STATE CHANGED","RINGING"); 
        break; 
        } 

        if(prevStat == 2 && stateString == 1) 
        { 
          Log.i("REGISTER A CALLL","==" +p); 
        } 

      } 
      }; 

       telephony.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); 
    } 

    } 

私も自分のコードが届かなかったすなわち、別のクラスにphonestatelistenerと同じことをしようとしたが、それが呼び出されていませんでした。私のマニフェストファイルには受信者が登録されていますが、phonestatelistenerの宣言はありません。それは登録されますか?

解決策がはっきりしていても、アンドロイドのものに新しいことは申し訳ありません。 すべてのヘルプは高く評価され:)

+0

チェックこの回答を:http://stackoverflow.com/a/5949116/438466 – Rabi

+0

あなたを開いたことを確認してくださいあなたがそれをインストールした後のアプリ。ユーザーが明示的にアプリを開くまで、アプリは停止状態です。 これを参照してください:http://stackoverflow.com/a/9955247/786462 これはあなたのBroadcastReceiverが呼び出されていないように見えるかもしれません。 – DataDino

答えて

0

をはい、リスナーを選択するか、受信、両方ではないそれらの