我如何替换我自己的 "Phone Ringing" 屏幕而不是 android 的默认屏幕?

how can i replace my own "Phone Ringing" screen instead of android's default one?

我进行了一些谷歌搜索,但无法为我的问题找到明确的答案。

我有一个 activity 需要在 phone 开始响铃(接到 phone 电话)时启动 - 而不是 android 的默认屏幕。

我知道我必须在 Manifest.xml 中设置接收器:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<receiver android:name=".ServiceReceiver">
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>

并创建一个接收器 class :

public class MyPhoneStateListener extends PhoneStateListener {

    public static Boolean phoneRinging = false;

    public void onCallStateChanged(int state, String incomingNumber) {

        switch (state) {
            case TelephonyManager.CALL_STATE_IDLE:
                Log.e("DEBUG", "IDLE");
                phoneRinging = false;
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                Log.e("DEBUG", "OFFHOOK");
                phoneRinging = false;
                break;
            case TelephonyManager.CALL_STATE_RINGING:
                //Intent intent=new Intent(getClass().)
                Log.e("DEBUG", "RINGING");
                phoneRinging = true;

                break;
        }
    }

}

class ServiceReceiver extends BroadcastReceiver {
    TelephonyManager telephony;
    Intent in;
    public void onReceive(Context context, Intent intent) {
        MyPhoneStateListener phoneListener = new MyPhoneStateListener();
        telephony = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);
   
    }
}

现在我可以在我的 logcat 中正确地获取 "RINGING",但是我怎样才能开始我的自定义 activity 或者这样做的首选方法是什么?

我找到了答案,我将与您分享。

首先与onCallStateChanged部分无关。 所以我必须在 BroadcastReceiver class 内的 onReceive 中调用目标 activity :

@Override
    public void onReceive(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)) {
                Intent intent1=new Intent(context, Ringing.class);
                intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                context.startActivity(intent1);
              
            }
        }
    }