📜  Android Simple Caller Talker示例

📅  最后修改于: 2020-10-11 03:43:05             🧑  作者: Mango

Android Simple Caller Talker示例

Android提供了知道传入号码并借助android语音API和电话管理器说出语音的功能。

在这里,我们将开发一个基本的Android应用程序,当电话处于振铃模式时,该应用程序会说出来电号码。

在下一页中,我们将看到此应用程序的完整版本,该版本带有呼叫者姓名,并提供设置选项来更改速度和音高。另外,它提供了在传入号码或呼叫者姓名之前和之后添加文本的选项。

activity_main.xml

我们在这里没有做任何特别的事情。它具有简单的textview。



    



活动课

在此活动中,我们编写了代码来了解电话状态,并借助TextToSpeech类说出了传入号码。

package com.example.callertalker;
import java.util.Locale;
import android.media.AudioManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;
import android.speech.tts.TextToSpeech;

public class MainActivity extends Activity implements TextToSpeech.OnInitListener {
private TextToSpeech tts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tts = new TextToSpeech(this, this);
  
        TelephonyManager telephonyManager = (TelephonyManager)getSystemService(
                                                                         Context.TELEPHONY_SERVICE);
        
        PhoneStateListener callStateListener = new PhoneStateListener() {
        public void onCallStateChanged(int state, String incomingNumber){
              if(state==TelephonyManager.CALL_STATE_RINGING){
              tts.speak(incomingNumber+" calling", TextToSpeech.QUEUE_FLUSH, null);
                  Toast.makeText(getApplicationContext(),"Phone is Ringing : "+incomingNumber, 
                                                                               Toast.LENGTH_LONG).show();
                 }
              if(state==TelephonyManager.CALL_STATE_OFFHOOK){
                    Toast.makeText(getApplicationContext(),"Phone in a call or call picked", 
                                                                                  Toast.LENGTH_LONG).show();
              }
              if(state==TelephonyManager.CALL_STATE_IDLE){
                    //phone is neither ringing nor in a call
              }
        }
        };
        telephonyManager.listen(callStateListener,PhoneStateListener.LISTEN_CALL_STATE);
}

@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
int result = tts.setLanguage(Locale.US);
    if (result == TextToSpeech.LANG_MISSING_DATA
            || result == TextToSpeech.LANG_NOT_SUPPORTED) {
        Log.e("TTS", "This Language is not supported");
    } else {    
    }

} else {
    Log.e("TTS", "Initilization Failed!");
}
}

@Override
public void onDestroy() {
// Don't forget to shutdown tts!
if (tts != null) {
    tts.stop();
    tts.shutdown();
}
super.onDestroy();
}
}

AndroidManifest.xml

您需要在此xml文件中添加READ_PHONE_STATE使用权限。让我们看完整的代码。




    

   
     
    
        
            
                

                
            
        
    


输出:


在实际的设备(例如手机)上运行它,然后从另一台手机拨打电话,然后您将收听传入的号码。