当我对于图片上传的任务时,对于android6.0以下的机型的拍照提取什么的都比较方便,但是在模拟器时,android版本是7.0,那就出问题了。
- 如果设备运行的是 Android 6.0(API 级别 23)或更高版本,并且应用的
targetSdkVersion
是 23 或更高版本,则应用在运行时向用户请求权限。用户可随时调用权限,因此应用在每次运行时均需检查自身是否具备所需的权限。 - 如果设备运行的是 Android 5.1(API 级别 22)或更低版本,并且应用的
targetSdkVersion
是 22 或更低版本,则系统会在用户安装应用时要求用户授予权限。如果将新权限添加到更新的应用版本,系统会在用户更新应用时要求授予该权限。用户一旦安装应用,他们撤销权限的唯一方式是卸载应用。
在6.0之前的版本都是在AndroidManifest.xml设置好了就木有问题,但是在6.0以上的时候,我们只是提出需要的权限,而决定权在用户手上,需要作出一系列的修改。
第一、AndroidManifest.xml中该设置的权限一样要设置,权限需要我们提出,少了后面就没反应了。
第二、直接贴代码了:
package yunmai.com.myapplication;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if ((ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_DENIED)
||(ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED)
||(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED)) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.CALL_PHONE)) {
Toast.makeText(this, "若不通过此权限则无法打电话", Toast.LENGTH_LONG).show();
}
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.CAMERA)) {
Toast.makeText(this, "若不通过此权限则无法拍照", Toast.LENGTH_LONG).show();
}
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
Toast.makeText(this, "若不通过此权限则无法获取内存或sd卡的内容", Toast.LENGTH_LONG).show();
}
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE,Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE}, 100);
} else {
//如果有权限就直接运行
//callPhone();
}
}
public void callPhone() {
Intent intent = new Intent(Intent.ACTION_CALL);
Uri data = Uri.parse("tel:" + "10000");
intent.setData(data);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "缺少拨打电话权限", Toast.LENGTH_LONG).show();
return;
}
startActivity(intent);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 100) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//callPhone();
} else {
Toast.makeText(this, "用户拒绝授予此权限", Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(this, "授权失败", Toast.LENGTH_LONG).show();
}
}
}
如果您的应用在其清单中列出正常权限(即,不会对用户隐私或设备操作造成很大风险的权限),系统会自动授予这些权限。如果您的应用在其清单中列出危险权限(即,可能影响用户隐私或设备正常操作的权限),系统会要求用户明确授予这些权限。
那些事危险权限在下面网址能找到。
没看懂的就看官方:
官方权限解释:https://developer.android.com/guide/topics/security/permissions.html