0

着信音の4秒後に発信者名を話すアプリケーションを実行しています。問題は、2〜3回の呼び出し音の後に発信者名を話すことです。問題は、通話がオフフックまたはアイドル状態であっても、発信者の名前を話し続けることです。

放送受信機の受信時のコードは

  state = bundle.getString(TelephonyManager.EXTRA_STATE);
         if(state.equals( TelephonyManager.CALL_STATE_OFFHOOK))   
         {
            System.out.println("fjkerj"); 
         }
         else if(state.equals( TelephonyManager.CALL_STATE_IDLE))   
         {

         }

         else if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))
         {
             System.out.println("Entered Receiver");
                 final String phonenumber = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);   
   //                     String info = "Detect Calls sample application\nIncoming number: " + phonenumber;
                 AudioManager amanager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
             switch (amanager.getRingerMode()) {
             case AudioManager.RINGER_MODE_SILENT:
             System.out.println("Silent");
                 break;
             case AudioManager.RINGER_MODE_VIBRATE:
                 System.out.println("Vibrate");
                 break;
             case AudioManager.RINGER_MODE_NORMAL:

                 amanager.setStreamVolume(AudioManager.STREAM_RING,1, 0);    
                 Handler handler=new Handler();
                  Runnable r=new Runnable()
                  {
                      public void run() 
                      {

                          if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))
                          {
                              Intent IncomingNumberIntent = new Intent(context1,SpeakOut.class);  
                              IncomingNumberIntent.putExtra("PhoneNumber", phonenumber);
                              context1.startService(IncomingNumberIntent); 
                          }

                      }
                  };
                  handler.postDelayed(r, 3000);       

通話が鳴っていてプロファイルが正常な場合、サービスにアクセスして名前を話しますが、通話がオフフックであってもアプリが名前を話すという問題が発生します。

4

1 に答える 1

1

コードを次のように変更します

int state = bundle.getInt(TelephonyManager.EXTRA_STATE);
switch (state)
{
    case TelephonyManager.CALL_STATE_OFFHOOK:
        System.out.println("fjkerj"); 
        break;

    case TelephonyManager.CALL_STATE_IDLE:
        break;

    case TelephonyManager.CALL_STATE_RINGING:
        // Your code goes here
}

run()メソッドからifステートメントを削除します

if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))
于 2013-03-19T04:58:28.697 に答える