Android 将本机呼出呼叫屏幕替换为自定义屏幕

Android 将本机呼出呼叫屏幕替换为自定义屏幕,android,Android,我正在尝试在本机呼叫者屏幕的顶部启动我的自定义屏幕,该屏幕可能包含呼叫者的全屏图像和一些用于拒绝呼叫等操作的按钮。使用这个我可以打电话,但会将我重定向到本机来电屏幕 如何用我的自定义屏幕取代默认的通话屏幕 startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phonenumber))); public class GetOutgoingNUmber extends BroadcastReceiver { final

我正在尝试在本机呼叫者屏幕的顶部启动我的自定义屏幕,该屏幕可能包含呼叫者的全屏图像和一些用于拒绝呼叫等操作的按钮。使用这个我可以打电话,但会将我重定向到本机来电屏幕

如何用我的自定义屏幕取代默认的通话屏幕

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 );

    }
}

现在的问题是,它显示我的屏幕几毫秒,然后再次显示本机屏幕….?

最好的方法是开发自己的手机应用程序,并期望用户将其设置为拨打电话的默认应用程序

编辑:


添加一个活动,该活动接受ACTION_call intent并具有数字键盘,然后用户输入呼叫号码后,您可以使用调用本机电话应用程序的电话号码启动ACTION_call intent。通过这种方式,用户还必须选择将您的应用程序设置为操作拨号意图的默认应用程序。

您不需要创建单独的应用程序。 最终,您只需要处理新的传出呼叫请求,因此创建一个
BroadcastReceiver
来侦听的事件,并创建一个
活动
来在该事件发生时调用

您需要在清单文件中指定关于的权限

查看一些参考资料


我希望这会有帮助

为传出呼叫编写接收器

public class OutgoingCallReceiver extends BroadcastReceiver {
@Override
    public void onReceive(final Context context, final Intent intent) {
      //Write intent for yout page
  }
}
将这些添加到清单中

<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>
在1秒后打开您的意图原始呼出呼叫屏幕需要800毫秒才能打开,因此您需要覆盖该屏幕,因此您必须在800毫秒后呼叫意图。
这对我很有用。

谢谢你的回复。但事实上,我已经完成了我的整个应用程序,现在剩下的事情就是定制输出屏幕,所以仅仅是创建整个手机应用程序对我来说会耗费很多时间。还有其他选择吗?再次感谢您的建议。您希望屏幕做什么?打电话?我已相应地编辑了代码。非常感谢。但是仍然没有看到我的屏幕。谢谢你的回复,我已经更新了我的问题。。。你能帮我解决这个问题吗?我已经相应地编辑了代码。非常感谢。但是我的屏幕还是没有显示,怎么延迟呢?我是否应该使用Handler postDelayed()方法使用Runnable…在添加延迟后,它仍然会产生一些问题。。我已经更新了我的任务,将延迟时间增加到2秒,然后重试。。在emulator中,很难在设备中实现try-in,在设备中它可以工作1000分钟。这听起来像一个肮脏的黑客,我不会依赖这段代码在所有可能的设备上工作。如果一台设备打开本机手机屏幕的时间超过800毫秒,该怎么办?
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"