当我对于图片上传的任务时,对于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