覆盖来电屏幕?

7
你好,我想知道是否有一种方法可以覆盖来电屏幕以添加更多功能?如果可以,你能否指点我方向或提供一些示例代码?
--------------------------------------------------编辑:-----------------------------
来电接收器已经可以正常工作,但是如何获取当前窗口以覆盖通话界面呢?这是我目前的进展...但我在尝试将上下文转换为活动时遇到了类转换异常,我无法想到其他获取窗口访问权限的方式。
@Override
    public void onReceive(Context context, Intent intent) {
        Bundle extras = intent.getExtras();
        if (extras != null) {
            String state = extras.getString(TelephonyManager.EXTRA_STATE);
            Log.w("DEBUG", state);
            Log.w("DEBUG", "-------------------------------------------------- Broadcast Received");
            if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
                String phoneNumber = extras
                        .getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
                Log.w("DEBUG", phoneNumber);
                Activity activity = (Activity)context.getApplicationContext();
                Window window = activity.getParent().getWindow();
                window.addContentView(window.findViewById(R.layout.textalertbuttonview),null);
                Log.w("DEBUG", "------------------------Button Added");

            }
        }
        else {
            Log.w("DEBUG", "---------------------------------------------------no Extras");
        }
    }

经过一些研究,似乎我无法在实际的来电屏幕上添加元素。因此,我必须创建自己的视图并覆盖来电屏幕。但我仍然愿意听取建议... 我看到了“来电加”,但找不到该项目的源代码。


请分享如果您有更好的解决方案。我也在尝试做同样的事情。非常感谢您的帮助。 - png
1个回答

2
一般来说: 您可以设置一个监听PHONE_STATE的BroadcastReceiver:
<receiver android:name=".CallsBroadcastReceiver" android:enabled="true">
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>

然后在这个接收器内部(在检查你想处理的电话状态(响铃,通话中,挂断等)之后),应该获取当前的窗口(应该是通话屏幕),并向其中添加一个视图。

当状态不是你想要处理的状态时,当然要删除该视图。

非常通用,但这就是想法。


谢谢,但是我如何在onReceive方法中获取当前窗口?我已经发布了一些我使用的代码,但是出现了ClassCastException异常。 - Pengume

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接