當前位置:編程學習大全網 - 源碼下載 - Android開發,如何編程實現開啟電話的免提功能?

Android開發,如何編程實現開啟電話的免提功能?

JAVA編寫,對應撥打電話只需要調用ACTION_CALL加對應電話號碼可以如下編寫:

view?plaincopy

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/目錄下方可。

首先確保應用具有如下權限:

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?plaincopy

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);

設置電話監聽:

view?plaincopy

private?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?plaincopy

TelephonyManager?telManager?=?(TelephonyManager)?getSystemService(Context.TELEPHONY_SERVICE);?

TelListner?listener?=?new?TelListner()?;?

telManager.listen(listener,?PhoneStateListener.LISTEN_CALL_STATE);

開啟或關閉免提功能:

view?plaincopy

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);?

}?

}

添加權限:

view?plaincopy

<uses-permission?android:name="android.permission.READ_PHONE_STATE"?/>?

<uses-permission?android:name="android.permission.MODIFY_AUDIO_SETTINGS"?/>

  • 上一篇:請問,現在哪些網絡遊戲是比較流行的,是免費的,即不需要充值卡
  • 下一篇:歐洲卡車模擬2全引擎最高速度列表
  • copyright 2024編程學習大全網