/**
 * 攔截來電電話號碼,並合成語音念出
 * 記得要加上攔截來電權限:android.permission.READ_PHONE_STATE
 */
public class MainActivity extends Activity {
private TextToSpeech mSpeech;
private Button btn;
TelephonyManager telMgr;
private EditText mEditText;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
telMgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
telMgr.listen(new CallStateListener(),
CallStateListener.LISTEN_CALL_STATE);
btn = (Button) findViewById(R.id.Button01);
mEditText = (EditText) findViewById(R.id.EditText01);
btn.setEnabled(false);
mSpeech = new TextToSpeech(this, new OnInitListener() {
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
// SpeakChinese(mSpeech, "畫面手機語音播放測試");
SpeakEnglish(mSpeech, "mobile voice test");

} else
Toast.makeText(MainActivity.this, "不支援語音播放",
Toast.LENGTH_LONG).show();
}
});
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mSpeech.speak(mEditText.getText().toString(),
TextToSpeech.QUEUE_ADD, null);
}
});
}

private boolean SpeakChinese(TextToSpeech mSpeech, String str) {
boolean flag = false;
int result = mSpeech.setLanguage(Locale.CHINESE);
//設定語言
if (str != null) {
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
Toast.makeText(MainActivity.this, "不支援中文語音播放",
Toast.LENGTH_LONG).show();
} else {
btn.setEnabled(true);
mSpeech.speak(str, TextToSpeech.QUEUE_ADD, null);
flag = true;
}
} else {
Toast.makeText(MainActivity.this, "攔截不到電話號碼,可能對方設為無號碼",
Toast.LENGTH_SHORT).show();
}

return flag;
}

private boolean SpeakEnglish(TextToSpeech mSpeech, String str) {
boolean flag = false;
int result = mSpeech.setLanguage(Locale.ENGLISH);
//設定語言
if (str != null) {
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {

Toast.makeText(MainActivity.this, "不支援英文語音播放",
Toast.LENGTH_LONG).show();

} else {

btn.setEnabled(true);
mSpeech.speak(str, TextToSpeech.QUEUE_ADD, null);
flag = true;
}
} else {
Toast.makeText(MainActivity.this, "攔截不到電話號碼,可能對方設為無號碼",
Toast.LENGTH_SHORT).show();

}

return flag;
}

public class CallStateListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
//incomingNumber==>攔截到的電話號碼
//state===>電話的狀態
if (state == TelephonyManager.CALL_STATE_IDLE)// 掛斷
{
Log.e("IDLE", incomingNumber);
} else if (state == TelephonyManager.CALL_STATE_OFFHOOK)// 接聽
{
Log.e("OFFHOOK", incomingNumber);
} else if (state == TelephonyManager.CALL_STATE_RINGING)// 來電
{
try {
String s = "電話來自 "
+ InsertSpaceIntoPhNumber(incomingNumber);
boolean flag = SpeakChinese(mSpeech, s);
if (!flag) {
s = "Phone Coming From "
+ InsertSpaceIntoPhNumber(incomingNumber);
flag = SpeakEnglish(mSpeech, s);

}
Log.v("Calling:來電", incomingNumber);
} catch (Exception e) {
Log.e("error", e.getMessage());
}
}
super.onCallStateChanged(state, incomingNumber);
}

// 將電話號碼每個號碼間加入一個空白字元
public String InsertSpaceIntoPhNumber(String s) {
String temp = "";
for (int i = 0; i < s.length(); i++) {
temp += s.charAt(i) + " ";
}
return temp;
}
}

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
if (mSpeech != null) {
mSpeech.stop();
mSpeech.shutdown();
}
super.onDestroy();
}

}
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 小Chiu 的頭像
    小Chiu

    Cuiu's Home

    小Chiu 發表在 痞客邦 留言(0) 人氣()