1

アクティビティを開始しようとしたとき、電話が鳴り止み、常に強制終了します。

これが私の放送受信機です

public class Incoming extends BroadcastReceiver {


    @Override
    public void onReceive(Context arg0, Intent arg1) {
        // TODO Auto-generated method stub

         MyPhoneStateListener phoneListener=new MyPhoneStateListener();  
            TelephonyManager telephony = (TelephonyManager)   
            arg0.getSystemService(Context.TELEPHONY_SERVICE);
         phoneListener.context = arg0;
            telephony.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);  
    }

}

そして、これは活動を開始するはずです

public class MyPhoneStateListener extends PhoneStateListener {  

    int prevstate;


    public void onCallStateChanged(int state,String incomingNumber){  


        if(prevstate==TelephonyManager.CALL_STATE_OFFHOOK && state == TelephonyManager.CALL_STATE_IDLE){

              Log.i("PARm","Here the activity should start");
          }
        else if(prevstate==TelephonyManager.CALL_STATE_RINGING && state == TelephonyManager.CALL_STATE_IDLE){ 

            Log.i("PARM","Here the activity should start");

        }



    switch(state){  
        case TelephonyManager.CALL_STATE_IDLE:  
          Log.d("DECallNoteActivity.get getContext();BUG", "IDLE"); 
          prevstate = state;
        break;  
        case TelephonyManager.CALL_STATE_OFFHOOK:  
          Log.d("DEBUG", "OFFHOOK");
          prevstate = state;
        break;  
        case TelephonyManager.CALL_STATE_RINGING:  
          Log.d("DEBUG", "RINGING");
          prevstate = state;
        break;  
        }

      } 


    } 

この場合、コンテキストを取得してアクティビティを開始する方法、または別の方法で開始する方法を教えていただければ幸いです。

ありがとうございました。

4

1 に答える 1

1

ブロードキャスト レシーバのコンテキストは、呼び出しの間のみ有効ですonReceive。保存して後で再利用することはできません。この方法でアクティビティを開始する必要がある場合は、のメソッドServiceからを開始し、そのサービスに電話状態リスナーを作成させ、必要な を起動させる必要があります。起動すると、それ自体を停止できます。BroadcastReceiveronReceiveActivityActivity

于 2012-05-07T15:27:30.477 に答える