Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果呼叫处于摘机状态,则停止tts_Android - Fatal编程技术网

Android 如果呼叫处于摘机状态,则停止tts

Android 如果呼叫处于摘机状态,则停止tts,android,Android,我正在做一个应用程序,它会在铃声响起4秒后说出呼叫者的名字。问题是它会在两到三声铃声后说出呼叫者的名字。问题是,即使呼叫处于摘机或空闲状态,它也会一直说出呼叫方的名字,我不希望这样 广播接收机onreceive中的代码为 state = bundle.getString(TelephonyManager.EXTRA_STATE); if(state.equals( TelephonyManager.CALL_STATE_OFFHOOK)) {

我正在做一个应用程序,它会在铃声响起4秒后说出呼叫者的名字。问题是它会在两到三声铃声后说出呼叫者的名字。问题是,即使呼叫处于摘机或空闲状态,它也会一直说出呼叫方的名字,我不希望这样

广播接收机onreceive中的代码为

  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);       
如果通话处于响铃状态且情景模式正常,则会转到服务并说出姓名,但 即使呼叫已挂断,应用程序仍会说出该名称的问题。

将代码更改为

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))

哦,谢谢,我使用了一个界面和一个电话状态监听器,你的想法在+1的条件下工作得很好