android - api23下报错“Call requires permission which may be rejected by user”

 我叫梁家耀_312 发布于 2022-11-02 23:03

菜鸟求教如何解决在api23下编译出现的permission问题。

报错原代码如下

    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse("tel:10086"));
            startActivity(intent);
        }
 
    

startActivity(intent) 那出现错误提示: “Call requires permission which may be rejected by user”
在stackoverflow上查到是使用api23编译后出现的permission问题,并给出了解决代码。

if (mContext.checkSelfPermission(Manifest.permission.CALL_PHONE) == 

    PackageManager.PERMISSION_GRANTED) {
        Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse("tel:" + phoneNumber));
        callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(callIntent);
    }
    

只是不太明白上述的代码如何修改后添加到MainActivity.....直接copy过去mContext会报错...求教应该怎么改呢?
如果代码修改成功后可以在6.0上运行,如何使应用在6.0以下正常运行呢?

2 个回答
  • 这里应该先判断当前Api版本,再决定是否需要使用checkSelfPermission这个方法(低版本Api中是没有这个方法的)。

    当然,也可以直接使用Support Library中兼容的代码,这块已经完成了适配。

    2022-11-12 01:39 回答
  • mContext是上下文对象,在你的MainActivity中即是MainActivity.this。做版本判断

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if(MainActivity.this.checkSelfPermission(Manifest.permission.CALL_PHONE)==PackageManager.PERMISSION_GRANTED) {
            callPhone();
        }else{
            //
        }
    }else{
        callPhone();
    }
    void callPhone(){
        Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse("tel:10086"));
        callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(callIntent);
    }
    2022-11-12 01:40 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有