我的应用程序是基于设置警报时间,并使呼叫自动启动在完美的时间与扬声器。我在用
<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"/>在我的申请中。如果我们只考虑应用程序的话,它就能正常工作。但是奇怪的行为是在安装这个应用程序之后,当我不使用这个应用程序的时候,每次这个应用程序都是打开的,每次调用都是从扬声器开始的。如何克服这一问题??如果我不使用这个应用程序,或者想在我的应用程序中设置所有的权限限制,我不想让扬声器打开。你知道吗??
发布于 2014-05-07 11:34:29
定义boolean callFromApp=false; //来控制已从应用程序发出的调用boolean callFromOffHook=false; //来控制对空闲状态的更改是从app调用
开始呼叫:
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);
}
}
}
}希望..。这会帮到你的。(它完美地工作而不影响其他人:)
https://stackoverflow.com/questions/23510066
复制相似问题