Android 隐藏默认来电屏幕并非始终有效
我正在开发一个接收来电并自动接听的应用程序。我有一个在工作线程自动应答调用时运行的活动。我想要完成的是抑制默认的来电屏幕,并在运行时将我的活动保持在前台 在这里做了一些研究之后,我认为这可以通过使用BroadcastReceiver并调用BroadcastReceiver.abortBroadcast来实现,同时将android.intent.action.PHONE_STATE broadcast设置为清单中的最高优先级 不幸的是,这只在50%的时间内有效。有一半的时间我能够接听电话,我的活动保持在前台,而有一半的时间,情况并非如此。我怎样才能让它每次都起作用 这是我的舱单:Android 隐藏默认来电屏幕并非始终有效,android,broadcastreceiver,Android,Broadcastreceiver,我正在开发一个接收来电并自动接听的应用程序。我有一个在工作线程自动应答调用时运行的活动。我想要完成的是抑制默认的来电屏幕,并在运行时将我的活动保持在前台 在这里做了一些研究之后,我认为这可以通过使用BroadcastReceiver并调用BroadcastReceiver.abortBroadcast来实现,同时将android.intent.action.PHONE_STATE broadcast设置为清单中的最高优先级 不幸的是,这只在50%的时间内有效。有一半的时间我能够接听电话,我的活动
<receiver android:enabled="true" android:name=".IncomingCallBroadcastReceiver">
<intent-filter android:priority="9999">
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>
在Android 4.1.2的类似代码中,我在abortBroadcast调用中遇到一个错误-您使用什么版本进行测试?我使用的是Android 4.0.3。您遇到了什么样的错误?java.lang.RuntimeException:BroadcastReceiver试图在非有序广播期间返回结果-代码中的差异似乎是您处于睡眠状态-可能在您中止广播时广播已完成?如果删除abortBroadcast呼叫,会有什么变化吗?我根据另一个相关SO问题的答案将睡眠放在那里。删除abortBroadcast只允许默认的通话屏幕在我的应用程序%100的上方出现。嗯,我在日志中的4.0.3中得到了相同的错误-不会使应用程序崩溃。你的睡眠可能给了你足够的时间让你的活动回到前台——在来电屏幕的顶部。我希望能完全阻止它的出现,看起来这是不可能的。
public class IncomingCallBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context arg0, Intent arg1) {
Bundle extras = arg1.getExtras();
if (extras != null) {
String state = extras.getString(TelephonyManager.EXTRA_STATE);
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
// set a flag for worker thread to answer call
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
abortBroadcast();
}
}