我正在尝试在本机拨出的来电屏幕上启动我的自定义屏幕,该屏幕可能包含来电者的全屏图像以及拒绝来电等操作的一些按钮。使用此功能,我可以拨打电话,但是将我重定向到原生来电屏幕......
我的自定义屏幕如何replace\override
默认通话屏幕?
startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phonenumber)));
public class GetOutgoingNUmber extends BroadcastReceiver {
final static String INTENT_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER";
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.v("DileBroadCastReceiver","In onReceive()");
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(context, OutGoingScreen.class);
i.putExtras(intent);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(i);
}
}, 1000);
}
此处OutGoingScreen用于显示外出屏幕
public class OutGoingScreen extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.outgoingscreen );
}
}
现在问题是它显示我的屏幕几毫秒并再次显示原生屏幕....?
答案 0 :(得分:2)
为拨出电话写一个接收器
public class OutgoingCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
//Write intent for yout page
}
}
将这些添加到Manifest
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<receiver android:name=.OutgoingCallReceiver" >
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
将以下主题添加到活动主题
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
打开你的意图1秒后bcoz原来的拨出电话屏幕需要800ms打开,所以你需要覆盖该屏幕,所以你必须在800ms后调用意图。 它对我有用。
答案 1 :(得分:0)
最好的方法是开发自己的手机应用程序,并希望用户将其设置为拨打电话的默认应用程序。
编辑:
添加一个接受ACTION_DIAL意图且具有数字小键盘的活动,然后一旦用户输入了电话号码,您就可以使用将调用本机电话应用程序的电话号码激活ACTION_CALL意图。这样,用户也必须选择将您的应用设置为ACTION_DIAL意图的默认应用。
答案 2 :(得分:0)
您无需创建单独的应用程序。
最终,您只想处理新的传出呼叫请求,因此创建BroadcastReceiver
以监听ACTION_NEW_OUTGOING_CALL的事件,并创建Activity
以在该事件上调用。
您需要在清单文件中指定有关PROCESS_OUTGOING_CALLS的权限。
查看一些参考:
handling-phone-call-requests-right-way
我希望它会有所帮助!