欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

【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中添加上权限申明哦:)

 


 

 实现效果截图:

 【android】关于call拨号功能实现的记录  【android】关于call拨号功能实现的记录   

  截图1.点击call按钮弹出提示框     截图2.点击确认按钮直接跳转至通话界面

 【android】关于call拨号功能实现的记录

  截图3.点击dial按钮进入拨号界面       


后记:

新手一枚,欢迎交流与指正!

thx :)