我正在开发一个应用程序,我必须覆盖INCOMING CALL SCREEN。
当设备接到电话时,我必须显示我的应用程序的弹出窗口。我已经对这项任务进行了详细的研究。 CALL POPOUT是一个使用相同功能的应用程序,但我没有得到源代码。
目前我没有几个模块可以让我们获得INCOMING CALL的动作。
public class MyPhonestateListner extends PhoneStateListener {
Context context;
List<String> blockedNumberList = new ArrayList<String>();
BlockDataSource datasourceobj;
public MyPhonestateListner(Context context) {
super();
this.context = context;
}
@Override
public void onCallStateChanged(int state, String callingNumber) {
super.onCallStateChanged(state, callingNumber);
callingNumber = callingNumber.replace(" ", "");
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
// handle out going call
// if(blockedNumberList.contains(callingNumber))
endCallIfBlocked(callingNumber);
break;
case TelephonyManager.CALL_STATE_RINGING:
// handle in coming call
new Handler().postDelayed(new Runnable() {
public void run() {
Intent intentPhoneCall = new Intent("android.intent.action.CALL");
intentPhoneCall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intentPhoneCall);
}
}, 10);
// if(blockedNumberList.contains(callingNumber))
//endCallIfBlocked(callingNumber);
// ActivityManagerNative.getDefault().moveTaskToBack(i);
//android.app.ActivityManager.RunningTaskInfo runningtaskinfo = TaskUtil.getPresentTaskInfo(this);
break;
default:
break;
}
}
}
MY reciever
public class BlockReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("I am reciever");
TelephonyManager telephony = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
MyPhonestateListner listener = new MyPhonestateListner(context);
telephony.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
}
}
在上面代码的帮助下,我在应用程序屏幕上显示了我的应用程序的MAP屏幕,但是只需要几个微秒级,然后输入呼叫屏幕就会出现在顶部。 当设备接到任何电话并需要显示我的应用程序屏幕时,我必须隐藏呼叫屏幕。
请建议。
答案 0 :(得分:0)
当有来电时,您的活动和默认传入活动都会显示。如果您的活动首先显示,那么稍后传入的活动将显示在您的活动上,它的任务和后台堆栈。
解决方案:当您的活动显示时,请检查传入的活动是否显示在您的活动上 - &gt;将您的活动再次移到最前面,但用户拒绝您的活动。
的回答