这是场景:
显示活动(活动).如果来电话,活动应该接收意图(将"来电屏幕"发送到后台/将其从显示器中隐藏)并且其本身对用户可见.我不一定想要抑制来电,因为我已经阅读了很多问题,这是公共API无法实现的.
我想要的只是以某种方式使我的活动隐藏在顶部隐藏的Android默认来电屏幕.
仅当我的活动可见时才需要此行为,这与使PHONE_STATE广播接收器启动我的活动不相等.后一个问题在SO上得到了多次回答.
请帮我.我一直在寻找近一天的方向.
谢谢你的时间.
这就是我解决它的方式:
的Manifest.xml
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
...
<receiver android:name=".MyPhoneBroadcastReceiver">
<intent-filter android:priority="99999">
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
<activity android:name=".LockScreenActivity" android:noHistory="true" android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.ANSWER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
MyPhoneBroadcastReceiver.java
public void onReceive(final Context context, Intent intent) {
Bundle extras = intent.getExtras();
...
if (extras != null) {
String state = extras.getString(TelephonyManager.EXTRA_STATE);
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
new Handler().postDelayed(new Runnable() {
public void run() {
Intent intentPhoneCall = new Intent("android.intent.action.ANSWER");
intentPhoneCall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intentPhoneCall);
}
}, 100);
}
}
}
Run Code Online (Sandbox Code Playgroud)
LockScreenActivity.java - 一个带有UI的常规活动类,显示屏幕已被锁定.它覆盖了屏幕的100%区域,即没有导航/状态栏.HOME/MENU键也被禁用.这就是我实现的目标:如何在我的活动中检测到用户按下HOME键?
PS:技巧不是主要逻辑,而是延迟100ms.没有它,每次在手机上接听电话时,系统默认来电屏幕都会删除您的自定义(家庭)锁定屏幕!
| 归档时间: |
|
| 查看次数: |
7191 次 |
| 最近记录: |