【android】关于call拨号功能实现的记录
程序员文章站
2022-05-03 10:41:32
前几天考试居然记错dial和call,故在此写上小demo来作区别,加深印象。 主要是实现call(拨通电话)功能,dial(拨电话)功能用作对比,话不多说,贴上代码。 1.创建布局文件如下:
前几天考试居然记错dial和call,故在此写上小demo来作区别,加深印象。
主要是实现call(拨通电话)功能,dial(拨电话)功能用作对比,话不多说,贴上代码。
1.创建布局文件如下:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <button android:id="@+id/btn_dial" android:text="dial" android:layout_width="match_parent" android:layout_height="wrap_content" /> <button android:id="@+id/call" android:text="call" android:layout_width="match_parent" android:layout_height="wrap_content" /> </linearlayout>
也就是添加了两个按钮dial和call,废话
2.添加java代码:
package com.cnblogs.dialandcall; import android.manifest; import android.content.intent; import android.content.pm.packagemanager; import android.net.uri; import android.support.annotation.nonnull; import android.support.v4.app.activitycompat; import android.support.v4.content.contextcompat; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.view.view; import android.widget.button; import android.widget.toast; public class mainactivity extends appcompatactivity implements view.onclicklistener { private button btn_dial; private button btn_call; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); btn_call = (button)findviewbyid(r.id.btn_call); btn_call.setonclicklistener(this); btn_dial = (button)findviewbyid(r.id.btn_dial); btn_dial.setonclicklistener(this); } @override public void onclick(view v) { switch (v.getid()){ case r.id.btn_call: oncall(); break; case r.id.btn_dial: intent dialintent = new intent(intent.action_dial); dialintent.setdata(uri.parse("tel:10086")); startactivity(dialintent); break; } } private void oncall() { int permissioncheck = contextcompat.checkselfpermission(this, manifest.permission.call_phone); if(permissioncheck!= packagemanager.permission_granted){ activitycompat.requestpermissions(this,new string[]{manifest.permission.call_phone}, integer.parseint("001")); } else{ startactivity(new intent(intent.action_call).setdata(uri.parse("tel:10086"))); } } @override public void onrequestpermissionsresult(int requestcode, @nonnull string[] permissions, @nonnull int[] grantresults) { switch (requestcode){ case 001: if(grantresults.length>0&&(grantresults[0]==packagemanager.permission_granted)){ oncall(); } else { toast.maketext(getbasecontext(),"you need allow the permission to run this app",toast.length_short).show(); } break; } } }
- 需要注意的是,我在btn_call按钮点击事件中添加了单独的方法来进行处理,这是因为call_phone在android 6.0及以上版本被认为是危险权限,需要在程序运行时申请。
- 关于android中权限的分类请参考以下链接:
3.添加manifest.xml文件代码:
<uses-permission android:name="android.permission.call_phone" />
千万不要忘记在androidmanifest.xml中添加上权限申明哦:)
实现效果截图:
截图1.点击call按钮弹出提示框 截图2.点击确认按钮直接跳转至通话界面
截图3.点击dial按钮进入拨号界面
后记:
新手一枚,欢迎交流与指正!
thx :)