通过自定义屏幕android替换本机传出呼叫屏幕

时间:2013-10-07 04:39:21

标签: android

我正在尝试在本机拨出的来电屏幕上启动我的自定义屏幕,该屏幕可能包含来电者的全屏图像以及拒绝来电等操作的一些按钮。使用此功能,我可以拨打电话,但是将我重定向到原生来电屏幕......

我的自定义屏幕如何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 );

    }
}

现在问题是它显示我的屏幕几毫秒并再次显示原生屏幕....?

3 个答案:

答案 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

android-dialer-application

我希望它会有所帮助!