我如何替换我自己的 "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);
}
}
}
我进行了一些谷歌搜索,但无法为我的问题找到明确的答案。
我有一个 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);
}
}
}