目前,当我运行我的应用程序并且电话响铃时,手机会获得首选项并且我的应用程序被终止。是否有任何方式我的应用程序采取优先选择,即让电话打到语音邮件或短时间内将我的应用程序转移到后台,直到用户接听电话,并在完成后返回前台。感谢
答案 0 :(得分:2)
private class PhoneCallListener extends PhoneStateListener {
private boolean isPhoneCalling = false;
// needed for logging
String TAG = "PhoneCallListener";
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if (TelephonyManager.CALL_STATE_RINGING == state) {
// phone ringing
Log.i(TAG, "RINGING, number: " + incomingNumber);
}
if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
// active
Log.i(TAG, "OFFHOOK");
isPhoneCalling = true;
}
if (TelephonyManager.CALL_STATE_IDLE == state) {
// run when class initial and phone call ended,
// need detect flag from CALL_STATE_OFFHOOK
Log.i(TAG, "IDLE");
if (isPhoneCalling) {
Log.i(TAG, "restart app");
// restart call application
Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage(
getBaseContext().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
isPhoneCalling = false;
}
}
}
}
并将此权限添加到manifest.xml文件
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
答案 1 :(得分:1)
我认为这是任何应用程序的android的默认功能 如果来电处于活动状态,则不活动。我们无法改变这一点。
虽然用户正在打电话,但他们可以换到另一个 应用程序只需按下主页按钮并启动另一个应用程序 主屏幕,或者双击主页按钮并切换到另一个应用程序,包括你的应用程序。
答案 2 :(得分:1)
我遇到了类似的问题,通过重写onPause()和onResume()方法解决了这个问题,在onPause()中保存了所有必需的变量,并在onResume()中恢复它们。
@Override
protected void onResume(){
super.onResume();
load();
}
@Override
protected void onPause(){
super.onPause();
save();
}
private void save() {
SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("DeviceName", deviceName);
editor.putString("ConnectOption", connectOption.toString());
editor.commit();
}
private void load() {
SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
deviceName = sharedPreferences.getString("DeviceName","");
String connectop = sharedPreferences.getString("ConnectOption","USB"); //You could provide a default value here
}