JAVA編寫,對應撥打電話只需要調用ACTION_CALL加對應電話號碼可以如下編寫:
view?plaincopyvoid?callPhone(){
Intent?intent?=?new?Intent(Intent.ACTION_CALL,Uri.parse("tel:110"));?//不能調用呼叫
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);?
startActivity(intent);
}
但是當撥打110,119,120等緊急電話時,無法自動呼出,還需要用戶進行確認操作,那麽就需要實現直接進行呼叫,但是前提app必須用系統級別權限,及system/app/目錄下方可。
首先確保應用具有如下權限:
view?plaincopy<uses-permission?android:name="android.permission.READ_PHONE_STATE"?/>
<uses-permission?android:name="android.permission.CALL_PHONE"?/>
<uses-permission?android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permission?android:name="android.permission.CALL_PRIVILEGED"?/>
同樣調用intent來開啟功能,不過內容有些變化
view?plaincopyvoid?callPhone(String?num){
Intent?intent?=?new?Intent("android.intent.action.CALL_PRIVILEGED",Uri.parse("tel:"+num));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);?
startActivity(intent);
}
然後在源碼下編譯,放到/system/app/即可使用。
開啟撥通電話後設置開啟揚聲器功能:
首先,獲取音頻管理器:audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
設置電話監聽:
view?plaincopyprivate?class?TelListner?extends?PhoneStateListener{?
boolean?comingPhone=false;?
@Override?
public?void?onCallStateChanged(int?state,?String?incomingNumber)?{?
switch?(state)?{?
case?TelephonyManager.CALL_STATE_IDLE:/*?無任何狀態?*/?
Log.d(tag,?"phone?idle");?
if(this.comingPhone){? this.comingPhone=false;? backMyApp();? setSpeekModle(false);? }?break;?
case?TelephonyManager.CALL_STATE_OFFHOOK:/*?接起電話?*/?
Log.d(tag,?"phone?answer");?
this.comingPhone=true;?
setSpeekModle(true);?
break;?
case?TelephonyManager.CALL_STATE_RINGING:/*?電話進來?*/?
Log.d(tag,?"phone?coming");?
this.comingPhone=true;?
setSpeekModle(true);?
break;?
}?
}?}
註冊監聽類:?
view?plaincopyTelephonyManager?telManager?=?(TelephonyManager)?getSystemService(Context.TELEPHONY_SERVICE);?
TelListner?listener?=?new?TelListner()?;? telManager.listen(listener,?PhoneStateListener.LISTEN_CALL_STATE);開啟或關閉免提功能:
view?plaincopyvoid?setSpeekModle(boolean?open){?
//audioManager.setMode(AudioManager.ROUTE_SPEAKER);?
currVolume?=?audioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL);?
audioManager.setMode(AudioManager.MODE_IN_CALL);
if(!audioManager.isSpeakerphoneOn()&&true==open)?{?
audioManager.setSpeakerphoneOn(true);? audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,? audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL),? AudioManager.STREAM_VOICE_CALL);?}else?if(audioManager.isSpeakerphoneOn()&&false==open){?
audioManager.setSpeakerphoneOn(false);? audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,currVolume,?AudioManager.STREAM_VOICE_CALL);?
}?
}
添加權限:
view?plaincopy<uses-permission?android:name="android.permission.READ_PHONE_STATE"?/>?
<uses-permission?android:name="android.permission.MODIFY_AUDIO_SETTINGS"?/>