`
wang_peng1
  • 浏览: 3944297 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

权限申请

 
阅读更多
public class PermissionActivity extends Activity{
    private static final String PERVIOUS_INTENT = "pervious_intent";
    private static final String REQUEST_PERMISSIONS = "request_permissions";
    private static final String PACKAGE_URL_SCHEME = "package:";
    private static final int REQUEST_CODE = 100;
    private String[] mRequestedPermissons;


    public static boolean checkAndRequestPermission(Activity activity, String[] permissions) {
        String[] neededPermissions = checkRequestedPermission(activity, permissions);
        if (neededPermissions.length == 0) {
            return false;
        } else {
            Intent intent = new Intent();
            intent.setClass(activity.getApplicationContext(), PermissionActivity.class);
            intent.putExtra(REQUEST_PERMISSIONS, permissions);
            activity.startActivity(intent);
            return true;
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mRequestedPermissons = getIntent().getStringArrayExtra(REQUEST_PERMISSIONS);

        if (savedInstanceState == null && mRequestedPermissons != null) {
            String[] neededPermissions =
                    checkRequestedPermission(PermissionActivity.this, mRequestedPermissons);
            requestPermissions(neededPermissions, REQUEST_CODE);
        }
    }

    private static String[] checkRequestedPermission(Activity activity, String[] permissionName) {
        boolean isPermissionGranted = true;
        List<String> needRequestPermission = new ArrayList<String>();
        for (String tmp : permissionName) {
            isPermissionGranted = (PackageManager.PERMISSION_GRANTED ==
                    activity.checkSelfPermission(tmp));
            if (!isPermissionGranted) {
                needRequestPermission.add(tmp);
            }
        }
        String[] needRequestPermissionArray = new String[needRequestPermission.size()];
        needRequestPermission.toArray(needRequestPermissionArray);
        return needRequestPermissionArray;
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions,
                int[] grantResults) {
        boolean isAllPermissionsGranted = true;
        if (requestCode != REQUEST_CODE || permissions == null || grantResults == null ||
                permissions.length == 0 || grantResults.length == 0) {
            isAllPermissionsGranted = false;
        } else {
            for (int i : grantResults) {
                if (i != PackageManager.PERMISSION_GRANTED)
                    isAllPermissionsGranted = false;
            }
        }
        if(isAllPermissionsGranted) {
            Intent intent = new Intent();
            intent.setClass(getApplicationContext(), MainActivity.class);
            startActivity(intent);

            finish();
        } else {
            showMissingPermissionDialog();
        }
    }

    private void showMissingPermissionDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle(R.string.dialog_title_help);
        builder.setMessage(R.string.dialog_content);
        builder.setNegativeButton(R.string.dialog_button_quit,
        new DialogInterface.OnClickListener() {
            @Override public void onClick(DialogInterface dialog, int which) {
                finish();
            }
        });
        builder.setPositiveButton(R.string.dialog_button_settings,
        new DialogInterface.OnClickListener() {
            @Override public void onClick(DialogInterface dialog, int which) {
                Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                intent.setData(Uri.parse(PACKAGE_URL_SCHEME + getPackageName()));
                startActivity(intent);
                finish();
            }
        });
        builder.show();
    }
}

 

 if (!PermissionActivity.checkAndRequestPermission(this, REQUIRE_PERMISSIONS)) {

            // Initialize UI.
            setContentView(R.layout.activity_user_main);
}

private final static String[] REQUIRE_PERMISSIONS = {
        permission.READ_EXTERNAL_STORAGE,
        permission.WRITE_EXTERNAL_STORAGE,
        permission.READ_PHONE_STATE,
        permission.RECORD_AUDIO,
        permission.ACCESS_COARSE_LOCATION,
        permission.ACCESS_FINE_LOCATION,
    };

 

分享到:
评论

相关推荐

    Android 定位权限申请

    - "GSP权限申请"可能指的是Google Play服务(Google Play Services)中的定位权限申请。Google Play服务提供了`Fused Location Provider`,它是一个高效的位置服务,能够结合多种定位源,如GPS、Wi-Fi和移动网络,...

    Qt for android 动态权限申请

    本文将详细介绍如何在Qt for Android应用中实现动态权限申请。 首先,理解Android的权限模型。在Android 6.0及更高版本,有两类权限:正常权限和危险权限。正常权限对应用功能影响较小,系统会自动授予;而危险权限...

    网络安全标准实践指南-APP系统权限申请使用指南.pdf

    《网络安全标准实践指南-APP系统权限申请使用指南》是一份由全国信息安全标准化技术委员会秘书处发布的技术文件,旨在规范移动互联网应用程序(App)在申请和使用系统权限时的行为,以防止个人信息安全风险。...

    android 6.0权限申请封装

    为了简化这一过程,开发者通常会将权限申请逻辑封装到一个单独的类或库中。封装的好处包括代码复用、统一处理异常、减少冗余以及提供更一致的用户体验。 1. **创建权限检查函数** 首先,我们需要创建一个函数来检查...

    Android权限申请示例

    本示例工程就是针对这一变化,展示了如何在Android应用中正确处理权限申请。 首先,我们需要理解Android的权限级别。权限分为正常权限和危险权限。正常权限不会直接影响用户的隐私,系统在安装应用时会自动授予。而...

    手术权限申请审批表及手术资质授权书实用.docx

    手术权限申请审批表和手术资质授权书是医疗行业中非常关键的文档,它们涉及到医生的手术权限管理和医疗质量控制。以下是对这些文档及其相关知识点的详细解释: 1. 手术权限申请审批表: - 此表格用于医生申请扩展...

    动态权限申请工具类.zip

    "动态权限申请工具类.zip"提供的就是一个这样的解决方案,帮助开发者高效地处理Android 6.0及以上版本的权限申请。 首先,我们来看动态权限申请的重要性。在之前的Android版本中,应用在安装时会一次性获取所有所需...

    系统权限申请表.doc

    系统权限申请表.doc

    android智能简易权限申请库

    为了简化这一过程,"android智能简易权限申请库"应运而生。 该库的主要目标是提供一个易用且无额外依赖的解决方案,使得开发者能够快速地集成到项目中,为Android 6.0及以上版本以及更低版本的应用实现权限申请功能...

    网络权限申请书.pdf

    网络权限申请书是企业内部流程中一个不可或缺的环节,主要用于确保员工在使用网络资源时遵循公司规定,并且只有经过适当审批的人员才能获得特定的网络访问权限。 首先,网络权限申请书通常包括以下几个关键部分: ...

    一文彻底解决Android动态权限申请(上).doc

    动态权限申请的必要性在于,对于Android 6.0及更高版本,如果应用试图使用未被用户授权的危险权限,系统会抛出异常。例如,如果应用尝试在没有用户授予存储卡读写权限的情况下写入文件,系统将阻止这一行为,导致...

    优化版动态权限申请工具类.zip

    为了应对这一变化,开发者需要编写额外的代码来处理动态权限申请。"优化版动态权限申请工具类.zip"提供了一个经过优化的工具类,用于简化这个过程。 动态权限申请工具类的主要目的是帮助开发者更方便地管理这些权限...

    Android6.0动态权限申请

    动态权限申请是Android 6.0的核心特性之一,它主要涉及到以下几个方面: 1. **敏感权限**:Android定义了一些敏感权限,如访问联系人、位置信息、摄像头等。这些权限在Android 6.0及更高版本中需要在运行时请求。 ...

    Android-Android一个权限申请工具类直接复制到项目中即可使用

    1. **动态权限申请**:针对Android 6.0及以上版本,该工具类能帮助开发者轻松地处理运行时权限申请,包括检查权限状态、显示权限请求对话框以及处理用户响应。 2. **简化代码**:通过封装权限申请逻辑,避免在...

    医院信息系统权限申请(或变更)审批表.doc

    医院信息系统权限申请(或变更)审批表.doc

    易飞ERP权限申请表

    易飞ERP6.0-9.0各模块用户权限申请表单,给大家分享,借鉴。

    android6.0动态权限申请

    动态权限申请就是这一变化的核心,它要求开发者在程序运行时,而不是安装时,向用户请求敏感权限。这种做法增加了用户对应用权限使用的透明度,提高了数据保护水平。 标题“android6.0动态权限申请”直指这一关键...

    内网访问互联网权限申请流程及使用管理办法.pdf

    内网访问互联网权限申请流程及使用管理办法.pdf

    android6.0 权限申请demo

    自定义了permissionManager类,并以此写了demo,判断android版本为6.0以后,对危险权限,进行了动态申请,并对拒绝的权限做了提示,并跳转权限处理界面,并对特殊权限申请以WRITE_SETTINGS为例做了参考。

Global site tag (gtag.js) - Google Analytics