踩坑日记:Intent 打电话 发短信等报错 6.0动态申请权限

今天没啥事干,在群里面看有人在问 intent 打电话....... 不说了 先撸一把代码,总结一下

1.Process: com.example.yangzhan.dadianhu, PID: 16934
    android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.SEND dat=sms:xxx (has extras) }

使用Intent打电话报错

String action ="android.intent.action.CALL";
Intent intent =new Intent(action);
intent.setData(Uri.parse("tel:"+110));
startActivity(intent);

加权限:

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

解决办法:使用handler 

new Thread(new Runnable() {
    @Override
    public void run() {
     Message msg =new Message();
     msg.what = 1;
     mHandler.sendMessage(msg);
    }
}).start();
private Handler mHandler =new Handler(){
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what){
            case 1:
                String action ="android.intent.action.CALL";
                Intent intent =new Intent(action);
                intent.setData(Uri.parse("tel:"+110));
                startActivity(intent);
                break;
        }
    }
};

2.java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxx cmp=com.android.server.telecom/.components.UserCallActivity } from ProcessRecord{dfd8d10 10528:com.example.yangzhan.test/u0a96} (pid=10528, uid=10096) with revoked permission android.permission.CALL_PHONE
        

这个是应为6.0后需要动态权限,上修改后的代码

权限数组:

String[] permissonsData =new String[]{Manifest.permission.CALL_PHONE,
        Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.SEND_SMS};

动态申请权限:

private void applypermission() {
    if (Build.VERSION.SDK_INT>=23){
        Log.e(TAG, "applypermission: " );
        int permissonCheck=ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION);//检查是否已经授权

        if(permissonCheck != PackageManager.PERMISSION_GRANTED){
            Log.e(TAG, "动态申请权限" );
            ActivityCompat.requestPermissions(MainActivity.this,permissonsData,3);
        }
    }
}
使用:
@SuppressLint("MissingPermission")
@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.btn_ok:
            Log.e(TAG, "onClick: " );
            Intent intent =new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse("tel:"+110111222));
            startActivity(intent);
            break;
        case R.id.btn_sms:
            Log.e(TAG, "onClick: 发短信" );
            Intent intent1 =new Intent(Intent.ACTION_SENDTO);
            intent1.setData(Uri.parse("sms:110"));
            intent1.putExtra("sms","来抓我呀!!!");
            startActivity(intent1);
            break;
            default:
                Log.e(TAG, "onClick: default" );
                break;
    }
}

效果:

猜你喜欢

转载自blog.csdn.net/qq_32425789/article/details/88963726