android 拨打紧急号码,通话时开启免提功能实现
生活随笔
收集整理的這篇文章主要介紹了
android 拨打紧急号码,通话时开启免提功能实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對應撥打電話只需要調用ACTION_CALL加對應電話號碼即可如下:
void 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/目錄下方可。
首先確保應用具有如下權限:
<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來開啟功能,不過內容有些變化 void 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);
設置電話監聽:
private class TelListner extends PhoneStateListener{boolean comingPhone=false;@Overridepublic 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;}}}注冊監聽類: TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);TelListner listener = new TelListner() ;telManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
開啟或關閉免提功能: void 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);}}
添加權限: <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
轉載于:https://www.cnblogs.com/happyxiaoyu02/p/6818947.html
總結
以上是生活随笔為你收集整理的android 拨打紧急号码,通话时开启免提功能实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 字符串分割方法
- 下一篇: SQL with(unlock)与wit