Android Studio创建打电话Demo

我们生而孤独,却无往不在寻找羁绊。

先上预览图


按照一般的方法,安卓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);

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容