踩坑日记: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;
}
}
效果: