android简单的调用者对话器例子

Android提供了知道传入号码并借助android Speech api和电话管理器说出来的功能。
在这里,我们将开发一个基本的android应用程序,当电话处于振铃模式时,它会说出传入号码。
在下一页中,我们将看到此应用程序的完整版本,该版本带有呼叫者姓名,并提供设置选项来更改速度和音高。另外,它提供了在传入号码或呼叫者姓名之前和之后添加文本的选项。
activity_main.xml【android简单的调用者对话器例子】我们在这里没有做任何特别的事情。它具有简单的textview。

< RelativeLayout xmlns:androclass="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" >< TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" />< /RelativeLayout>

活动类在此活动中,我们编写了代码来了解电话状态,并在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使用权限。让我们看完整的代码。
< ?xml version="1.0" encoding="utf-8"?> < manifest xmlns:androclass="http://schemas.android.com/apk/res/android" package="com.example.callertalker" android:versionCode="1" android:versionName="1.0" >< uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />< uses-permission android:name="android.permission.READ_PHONE_STATE" />< application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > < activity android:name="com.example.callertalker.MainActivity" android:label="@string/app_name" > < intent-filter> < action android:name="android.intent.action.MAIN" />< category android:name="android.intent.category.LAUNCHER" /> < /intent-filter> < /activity> < /application>< /manifest>

输出:
android简单的调用者对话器例子

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

    推荐阅读