在Android中拨打电话

vfsoraki

我想知道如何在不使用Intents的情况下在android中拨打电话

我知道可以使用Intent完成此操作,但是我搜索了developer.android.com,但与此主题无关​​。

假设我要为Android编写一个新的拨号程序。我该怎么办?

提前致谢

胆大

拨打电话,

private void performDial(String numberString) {
if (!numberString.equals("")) {
   Uri number = Uri.parse("tel:" + numberString);
   Intent dial = new Intent(Intent.ACTION_CALL, number);
   startActivity(dial);
}

}

将此权限添加到清单中。

<uses-permission android:name="android.permission.CALL_PHONE" />

请参考这个

要显示自定义拨号程序屏幕,请写一个接收者以进行拨出电话

public class OutgoingCallReceiver extends BroadcastReceiver {
 @Override
public void onReceive(final Context context, final Intent intent) {
  //this will receive the outgoing call

}
 }

将这些添加到清单

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

要在启动Dialer应用程序时在其上方显示视图,请在广播接收器中使用此代码

 private WindowManager wm;
    private static LinearLayout ly1;
    private WindowManager.LayoutParams params1;

    // onReceive function of the Broadcast Receiver
    public void onReceive(Context arg0, Intent arg1) {
            String state = arg1.getStringExtra(TelephonyManager.EXTRA_STATE);

            // Adds a view on top of the dialer app when it launches.
            if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){
                wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
                params1 = new WindowManager.LayoutParams(
                        LayoutParams.MATCH_PARENT,
                        LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT |
                        WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                        WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
                        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                        PixelFormat.TRANSPARENT);

                params1.height = 75;
                params1.width = 512;
                params1.x = 265; 
                params1.y = 400;
                params1.format = PixelFormat.TRANSLUCENT;

                ly1 = new LinearLayout(context);
                ly1.setBackgroundColor(Color.BLACK);
                ly1.setOrientation(LinearLayout.VERTICAL);

                wm.addView(ly1, params1);
            }

            // To remove the view once the dialer app is closed.
            if(arg1.getAction().equals("android.intent.action.PHONE_STATE")){
                String state = arg1.getStringExtra(TelephonyManager.EXTRA_STATE);
                if(state.equals(TelephonyManager.EXTRA_STATE_IDLE)){
                    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
                    if(ly1!=null)
                    {
                        wm.removeView(ly1);
                        ly1 = null;
                    }
                }
            }
        }

注意:上面的示例生成的视图具有黑色背景的布局,其尺寸如上所述。您可以自由在此视图中添加任何布局。例如,要在视图中包括布局,可以修改以上代码以包括以下代码。

 ly1 = new LinearLayout(getApplicationContext());
    ly1.setOrientation(LinearLayout.HORIZONTAL);


    View hiddenInfo = getLayoutInflater().inflate(R.layout.layout1, ly1, false);
    ly1.addView(hiddenInfo);

    wm.addView(ly1, params1);

在清单中,您需要包括以下权限。

 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"></uses-permission>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<action android:name="android.intent.action.PHONE_STATE" /

注意:您也可以从BroadcastReceiver调用活动而不用膨胀窗口。为此,请使用以下代码。

    new Handler().postDelayed(new Runnable() {

     @Override
     public void run() {
         // TODO Auto-generated method stub
         Intent intent = new Intent(context, CustomDialerActivity.class);
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         context.startActivity(intent);
     }
 }, 2000);

我不确定您的自定义GUI是否将始终位于默认GUI的顶部,因为系统广播接收器和您的接收器都试图将其GUI显示在屏幕顶部。我们不确定哪个是最先调用的,但是要使您的GUI出现在屏幕顶部的一项棘手的工作是在电话响起1-2秒后调用您的活动。为此,我使用了处理程序

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章