6.0权限

import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;

import static android.content.ContentValues.TAG;

public class MainActivity extends Activity {
    private Button btn3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn3 = (Button) findViewById(R.id.btn3);
        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean flag = PermissionsUtils.hasPermission(
                        MainActivity.this,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE);
                final String[] PERMISSIONS_STORAGE = {
                        Manifest.permission.READ_EXTERNAL_STORAGE,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE
                };
                if (flag == true) {
                    writeFile();
                } else {
                    if (!shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                        showMessageOKCancel("需要读取存储的权限",
                                new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        PermissionsUtils.requestPermission(MainActivity.this, PERMISSIONS_STORAGE);
                                    }
                                }
                        );
                    } else {
                        PermissionsUtils.requestPermission(MainActivity.this, PERMISSIONS_STORAGE);
                    }
                }
            }

            private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
                new AlertDialog.Builder(MainActivity.this)
                        .setMessage(message)
                        .setPositiveButton("OK", okListener)
                        .setNegativeButton("Cancel", null)
                        .create()
                        .show();
            }
        });
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case PermissionsUtils.REQUESTCODE:
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // Permission Granted
                    writeFile();
                } else {
                    // Permission Denied
                    Toast.makeText(this, "拒绝授权", Toast.LENGTH_SHORT).show();
                }
                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }

    private void writeFile() {
        String fileName = "abc" + SystemClock.currentThreadTimeMillis() + ".txt";
        File file = new File("/storage/emulated/0/" + fileName);
        try {
            file.createNewFile();
            if (file.exists()) {
                Log.i(TAG, "writeFile: " + file.getAbsolutePath());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void readFile() {
        File file = new File("/storage/emulated/0/blank_500_500.png");
        if (file.exists()) {
            Log.i(TAG, "readFile: " + file.getAbsolutePath());
        }
    }
}
import android.app.Activity;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;

public class PermissionsUtils {
    final static int REQUESTCODE = 111;
    public static void requestPermission(Activity activity, String[] permisssions) {
        ActivityCompat.requestPermissions(
                activity,
                permisssions,
                REQUESTCODE
        );
    }
    public static boolean hasPermission(Activity activity, String permission) {
        int permissionCode = ActivityCompat.checkSelfPermission(
                activity, permission);
        if (permissionCode != PackageManager.PERMISSION_GRANTED) {
            return false;
        } else {
            return true;
        }
    }
}
时间: 2024-10-31 02:35:21

6.0权限的相关文章

项目中处理android 6.0权限管理问题

android 6.0对于权限管理比较收紧,因此在适配android 6.0的时候就很有必要考虑一些权限管理的问题. 如果你没适配6.0的设备并且权限没给的话,就会出现类似如下的问题: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxxxxxxxxxx cmp=com.android.server.telecom/.componen

[异常解决] 安卓6.0权限问题导致老蓝牙程序出现异常解决办法:Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission...

一.问题: 之前写的一款安卓4.4的应用程序,用来连接蓝牙BLE,而现在拿出来用新的AS编译(此时SDK为6.0,手机也是6.0)应用程序并不能搜索到蓝牙,查看log总是报权限错误: Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission... 二.解决过程: 但是,我把相应的权限加入manifest.xml仍然报这个错误,最终查到这个资料: http://www.open-open.com/lib/view/open1445

Android开发——Android 6.0权限管理机制详解

0.前言 最近在研究所实习,我负责维护Android手机取证项目的Android客户端,有客户反映我们的APP在Android6.0无响应,经过调试发现SD卡读写权限权限被拒绝.但明明是在AndroidManifest.xml文件中声明过的.查了很多资料才知道Android6.0的很多权限申请机制发生了改变,可以说是Android6.0在安全机制上更进了一步吧,因此写下这篇文章以记录. 注:在运行程序时,对于某些权限向用户询问申请(后面会详细地讲)时因为我们知道客户在我们APP中不会点"拒绝&q

Android 6.0权限申请

 一.6.0发布权限变化 1.Android需要手动加入权限申请原因: 1)权限分为了两类:一类是Normal Permissions,这类权限一般不涉及用户隐私,是不需要用户进行授权的,比如手机震动.访问网络等:另一类是Dangerous Permission,一般是涉及到用户隐私的,需要用户进行授权,比如读取sdcard.访问通讯录等. Normal Permissions如下 ACCESS_LOCATION_EXTRA_COMMANDS ACCESS_NETWORK_STATE ACCES

Android_设备隐私获取,忽略6.0权限管理

1.前言 (1).由于MIUI等部分国产定制系统也有权限管理,没有相关api,故无法判断用户是否允许获取联系人等隐私.在Android 6.0之后,新增权限管理可以通过官方api判断用户的运行状态: (2).我们指定targetSdkVersion为23或者之后我们还需要在运行时请求这些所需的权限.这很重要,因为已经出现了很多开发者把targetSdkVersion飙到了最新,然后发现自己的app疯狂的崩溃,这是由于他们没有实现执行运行时权限请求的代码.当你已经把一个targeting API

Android 6.0权限管理的解析与实战

一.引言 随着Android6.0发布,系统增加了一些新的特性和功能.这次的发布介绍了一种新的权限机制.用户可以在运行时直接管理应用程序的权限.这个功能提升了权限控制的可见性和可控性.同时简化了安装和自动升级过程,用户可以单独撤销或者授予应用程序某项权限,对应用拥有更多的控制权. 二.Android 6.0权限机制 当你应用程序target是Android 6.0及以上(API level 23),确保在运行时检查和请求权限.为了确定你的app是否授予某个权限,通过checkSelfPermis

Android权限管理PermissionsDispatcher2.3.2使用+原生6.0权限使用

PermissionsDispatcher2.3.2使用 Android6.0权限官网https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html?hl=zh-cn系统权限:https://developer.android.com/training/permissions/index.html?hl=zh-cn权限的最佳做法:https://developer.android.com/trai

Android6.0权限系统

Android6.0权限系统 Android权限系统是一个非常重要的安全问题,因为它只有在安装时会询问一次.一旦软件本安装之后,应用程序可以在用户毫不知情的情况下使用这些权限来获取所有的内容. 很多坏蛋会通过这个安全缺陷来收集用户的个人信息并使用它们来做坏事的情况就不足为奇了. Android团队也意识到了这个问题.在经过了7年后,权限系统终于被重新设置了.从Anroid 6.0(API Level 23)开始,应用程序在安装时不会被授予任何权限,取而代之的是在运行时应用回去请求用户授予对应的权

Android 6.0权限问题

Android 6.0 open failed: EACCES (Permission denied) 对于6.0+权限问题,报错如上: 解决方案: Android 6.0 (Marshmallow). 添加新的权限模型,需要在运行时动态获取所需要的权限. 首先判断手机系统版本是否在6.0+然后才是支持运行时动态获取权限: private boolean canMakeSmores(){ return(Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLI

Android 6.0 权限管理

Android 6.0 权限管理 Android permission 运行时权限(Runtime permission) 旧版兼容 6.0权限弹框的两种模式 6.0之后的权限分类 Normal permissions(普通权限) Dangerous permissions(危险权限) 运行时权限请求的基本步骤 权限请求策略 运行时权限(Runtime permission) android的权限系统一直是首要的安全概念,因为这些权限只在安装的时候被询问一次.一旦安装了,app可以在用户毫不知晓