我的应用程序基于设置闹钟时间,并在扬声器开启的情况下使呼叫在完美时间自动启动。我正在使用
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_CONTACTS"/>
在我的申请中。如果我们只考虑应用程序,它的工作正常。但奇怪的行为是在安装此应用程序之后,当我不使用应用程序时,每次此应用程序打开时,每次调用都以扬声器开始。 如何克服这个??? 如果我不使用此应用程序或想在我的应用程序中实现此所有权限限制,我不希望扬声器开启。请问有什么想法?
答案 0 :(得分:0)
定义
boolean callFromApp=false;
//要控制来自应用程序boolean callFromOffHook=false;
的调用//要控制对应用程序调用的更改为空闲状态
开始电话:
PhoneCallListener phoneListener = new PhoneCallListener();
TelephonyManager telephonyManager =
(TelephonyManager).getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:"+phoneNumber));
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(callIntent);
callFromApp= true ;
和
在PhoneStateListener class
class PhoneCallListener extends PhoneStateListener {
private boolean isPhoneCalling = false;
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if (TelephonyManager.CALL_STATE_RINGING == state) {
// phone ringing
if (callFromApp)
{
AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);
}
}
if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
// active
isPhoneCalling = true;
if (callFromApp)
{
AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);
}
}
if (TelephonyManager.CALL_STATE_IDLE == state) {
// run when class initial and phone call ended, need detect flag
if (isPhoneCalling) {
isPhoneCalling = false;
callFromApp = false;
AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_NORMAL); //Deactivate loudspeaker
// Remove listener
PhoneCallListener phoneListener = new PhoneCallListener();
TelephonyManager telephonyManager = (TelephonyManager)mContext.getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(phoneListener,PhoneStateListener.LISTEN_NONE);
}
}
}
}
希望..这会对你有所帮助。它完美地工作而不影响其他:)