Android Studio创建打电话Demo

作者: Superbsco | 来源:发表于2017-03-02 18:57 被阅读601次
    我们生而孤独,却无往不在寻找羁绊。

    先上预览图

    按照一般的方法,安卓6.0以下的设备获取打电话权限很简单,但是6.0以上就稍微麻烦一点。

    下面的方法是适合6.0以上的。

    ativity上:


    xmlns:tools="http://schemas.android.com/tools"

    android:id="@+id/activity_main"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context="com.example.superseppol.telephonedemo.MainActivity">

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:text="@string/funtion_diol"

    android:layout_marginBottom="46dp"

    android:layout_above="@+id/editText2"

    android:layout_alignRight="@+id/callbutton"

    android:layout_alignEnd="@+id/callbutton"/>

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:inputType="phone"

    android:ems="10"

    android:id="@+id/editText2"

    android:layout_centerVertical="true"

    android:layout_centerHorizontal="true"/>

    android:text="@string/funtion_start"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:id="@+id/callbutton"

    android:onClick="callButtonClickAction"

    android:layout_marginTop="20dp"

    android:layout_below="@+id/editText2"

    android:layout_centerHorizontal="true"/>

    申请权限:

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

    在java包里添加DialogUtil.java

    packagecom.example.superseppol.telephonedemo;

    /**

    * Created by Super Seppol on 2017/3/2.

    */

    importandroid.app.Activity;

    importandroid.app.AlertDialog;

    importandroid.content.Context;

    importandroid.content.DialogInterface;

    importandroid.view.WindowManager;

    /**

    *对话框工具箱

    *

    *@authorxiaopan

    */

    public classDialogUtil

    {

    /**

    *显示一个对话框

    *

    *@paramcontext上下文对象,最好给Activity,否则需要android.permission.SYSTEM_ALERT_WINDOW

    *@paramtitle标题

    *@parammessage消息

    *@paramconfirmButton确认按钮

    *@paramconfirmButtonClickListener确认按钮点击监听器

    *@paramcenterButton中间按钮

    *@paramcenterButtonClickListener中间按钮点击监听器

    *@paramcancelButton取消按钮

    *@paramcancelButtonClickListener取消按钮点击监听器

    *@paramonShowListener显示监听器

    *@paramcancelable是否允许通过点击返回按钮或者点击对话框之外的位置关闭对话框

    *@paramonCancelListener取消监听器

    *@paramonDismissListener销毁监听器

    *@return对话框

    */

    public staticAlertDialogshowAlert(Context context,String title,String message,

    String confirmButton,DialogInterface.OnClickListener confirmButtonClickListener,

    String centerButton,DialogInterface.OnClickListener centerButtonClickListener,

    String cancelButton,DialogInterface.OnClickListener cancelButtonClickListener,

    DialogInterface.OnShowListener onShowListener, booleancancelable,

    DialogInterface.OnCancelListener onCancelListener,

    DialogInterface.OnDismissListener onDismissListener)

    {

    AlertDialog.Builder promptBuilder =newAlertDialog.Builder(context);

    if(title !=null)

    {

    promptBuilder.setTitle(title);

    }

    if(message !=null)

    {

    promptBuilder.setMessage(message);

    }

    if(confirmButton !=null)

    {

    promptBuilder.setPositiveButton(confirmButton,confirmButtonClickListener);

    }

    if(centerButton !=null)

    {

    promptBuilder.setNeutralButton(centerButton,centerButtonClickListener);

    }

    if(cancelButton !=null)

    {

    promptBuilder.setNegativeButton(cancelButton,cancelButtonClickListener);

    }

    promptBuilder.setCancelable(true);

    if(cancelable)

    {

    promptBuilder.setOnCancelListener(onCancelListener);

    }

    AlertDialog alertDialog = promptBuilder.create();

    if(!(contextinstanceofActivity))

    {

    alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

    }

    alertDialog.setOnDismissListener(onDismissListener);

    alertDialog.setOnShowListener(onShowListener);

    alertDialog.show();

    returnalertDialog;

    }

    /**

    *显示一个对话框

    *

    *@paramcontext上下文对象,最好给Activity,否则需要android.permission.SYSTEM_ALERT_WINDOW

    *@paramtitle标题

    *@parammessage消息

    *@paramconfirmButtonClickListener确认按钮点击监听器

    *@paramcancelButtonClickListener取消按钮点击监听器

    *@return对话框

    */

    public staticAlertDialogshowConfirm(Context context,String title,String message,

    DialogInterface.OnClickListener confirmButtonClickListener,

    DialogInterface.OnClickListener cancelButtonClickListener)

    {

    returnshowAlert(context,title,message,"Yes",

    confirmButtonClickListener, null, null,"No",cancelButtonClickListener, null, true, null, null);

    }

    /**

    *显示一个提示框

    *

    *@paramcontext上下文对象,最好给Activity,否则需要android.permission.SYSTEM_ALERT_WINDOW

    *@parammessage提示的消息

    *@paramconfirmButton确定按钮的名字

    */

    public staticAlertDialogshowPrompt(Context context,String message,String confirmButton)

    {

    returnshowAlert(context, null,message,confirmButton, null, null, null, null, null, null, true, null, null);

    }

    /**

    *显示一个提示框

    *

    *@paramcontext上下文对象,最好给Activity,否则需要android.permission.SYSTEM_ALERT_WINDOW

    *@parammessage提示的消息

    */

    public staticAlertDialogshowPrompt(Context context,String message)

    {

    returnshowAlert(context, null,message,"OK", null, null, null, null, null, null, true, null, null);

    }

    }

    再添加RequestPermissionType.java

    packagecom.example.superseppol.telephonedemo;

    /**

    * Created by Super Seppol on 2017/3/2.

    */

    public interfaceRequestPermissionType

    {

    /**

    *请求打电话的权限码

    */

    intREQUEST_CODE_ASK_CALL_PHONE=100;

    }

    最后的MainActivity上的代码:

    packagecom.example.superseppol.telephonedemo;

    importandroid.Manifest;

    importandroid.app.Dialog;

    importandroid.content.Context;

    importandroid.content.DialogInterface;

    importandroid.content.Intent;

    importandroid.content.pm.PackageManager;

    importandroid.net.Uri;

    importandroid.os.Build;

    importandroid.support.v4.app.ActivityCompat;

    importandroid.support.v4.content.ContextCompat;

    importandroid.support.v7.app.AppCompatActivity;

    importandroid.os.Bundle;

    importandroid.view.View;

    importandroid.widget.EditText;

    importandroid.widget.Toast;

    public classMainActivityextendsAppCompatActivity

    {

    /**

    * context

    */

    privateContextmContext;

    privateEditTexteditText;

    @Override

    protected voidonCreate(Bundle savedInstanceState)

    {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    this.mContext=this;

    editText=(EditText)findViewById(R.id.editText2);

    }

    /**

    *点击打电话的按钮响应事件

    *

    *@paramviewview

    */

    public voidcallButtonClickAction(View view)

    {

    //先new出一个监听器,设置好监听

    DialogInterface.OnClickListener dialogOnclicListener =newDialogInterface.OnClickListener()

    {

    @Override

    public voidonClick(DialogInterface dialog, intwhich)

    {

    switch(which)

    {

    caseDialog.BUTTON_POSITIVE:

    Toast.makeText(MainActivity.this,"Yes"+ which,Toast.LENGTH_SHORT).show();

    requestPermission();

    break;

    caseDialog.BUTTON_NEGATIVE:

    Toast.makeText(MainActivity.this,"No"+ which,Toast.LENGTH_SHORT).show();

    break;

    caseDialog.BUTTON_NEUTRAL:

    Toast.makeText(MainActivity.this,"Cancel"+ which,Toast.LENGTH_SHORT).show();

    break;

    }

    }

    };

    //弹窗让用户选择,是否允许申请权限

    DialogUtil.showConfirm(mContext,"申请权限","是否允许获取打电话权限?",dialogOnclicListener,dialogOnclicListener);

    }

    /**

    *申请权限

    */

    private voidrequestPermission()

    {

    //判断Android版本是否大于23

    if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M)

    {

    intcheckCallPhonePermission = ContextCompat.checkSelfPermission(mContext,Manifest.permission.CALL_PHONE);

    if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED)

    {

    ActivityCompat.requestPermissions(this, newString[]{Manifest.permission.CALL_PHONE},

    RequestPermissionType.REQUEST_CODE_ASK_CALL_PHONE);

    return;

    }

    else

    {

    callPhone();

    }

    }

    else

    {

    callPhone();

    }

    }

    /**

    *注册权限申请回调

    *@paramrequestCode申请码

    *@parampermissions申请的权限

    *@paramgrantResults结果

    */

    @Override

    public voidonRequestPermissionsResult(intrequestCode,String[] permissions, int[] grantResults)

    {

    switch(requestCode)

    {

    caseRequestPermissionType.REQUEST_CODE_ASK_CALL_PHONE:

    if(grantResults[0] == PackageManager.PERMISSION_GRANTED)

    {

    callPhone();

    }

    else

    {

    // Permission Denied

    Toast.makeText(MainActivity.this,"CALL_PHONE Denied",Toast.LENGTH_SHORT).show();

    }

    break;

    default:

    super.onRequestPermissionsResult(requestCode,permissions,grantResults);

    }

    }

    /**

    *拨号方法

    */

    private voidcallPhone()

    {

    String phone=editText.getText().toString();

    Intent intent =newIntent();

    intent.setAction(Intent.ACTION_CALL);

    intent.setData(Uri.parse("tel:"+phone));

    startActivity(intent);

    }

    }

    相关文章

      网友评论

        本文标题:Android Studio创建打电话Demo

        本文链接:https://www.haomeiwen.com/subject/ehykgttx.html