Android - 在启动时提示/请求权限

大安166

我试图获得一个弹出窗口,要求用户授予在启动期间访问外部存储的权限。我有一个活动名称 Start,它是我的 Launcher 活动。通过此活动,我声明了一些全局变量并创建了一些目录(如果不存在)。为此,我需要对外部存储的权限。我已经实现了在 developer.android.com 上共享的代码,但它没有授予我所需的权限。

我认为这不起作用,因为请求用户输入的弹出窗口未显示,因为 layout.activity_wait 尚不可见,因此我应该将我的代码分发到 AsyncTask 中,以便在调用 requestPermissions 之前 layout.activity_wait 可见。

下面的代码没有 AsyncTask(是的,我知道应用程序也应该能够在没有权限的情况下工作,我将在稍后阶段构建它:))。请让我知道您对此有何看法。谢谢!

public class Start extends AppCompatActivity {

    /**
    set a bunch of variables to be used in all activities
    **/

    public static ...
    public static ... ...
    public static int MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 0;



    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wait);

        checkPermission();


        /**
        do some stuff at startup, like creating some directories if not already present
        **/

        launchIntent(this, Home.class); //launch the home screen after initializing all variables and creating directories
        finish();
    }


    private void checkPermission() {
        if (ContextCompat.checkSelfPermission(Start.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            Log.d("permission", "NOT granted");
             ActivityCompat.requestPermissions(Start.this,
                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                        MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
        }else{
            Log.d("permission", "granted");
        }
    }
}
大安166

谢谢@Mike M. 设法让它工作。我不明白 onRequestPermissionsResult() 的目的。现在我知道了。请参阅下面的我的代码。

public class Start extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback {

        /**
        set a bunch of variables to be used in all activities
        **/

        public static ...
        public static ... ...
        public static int MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 0;



        public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_wait); //this is a view with a progress bar
            checkPermission();

        }

        private void permissionsGranted() {

                 /**
            do some stuff at startup, like creating some directories if not already present
            **/

            launchIntent(this, Home.class); //launch the home screen after initializing all variables and creating directories
            finish();


        }



        private void checkPermission() {
            if (ContextCompat.checkSelfPermission(Start.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                // do this if permisisons have not yet been granted
                Log.d("permission", "NOT granted");
                ActivityCompat.requestPermissions(Start.this,
                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                        MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
            }else{
                // if the permissions have already been granted do the following
                Log.d("permission", "granted");
                permissionsGranted();
            }
        }

        // this is required when ActivityCompat.requestPermissions() is called
        @Override
        public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
            switch (requestCode) {
                case MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: {

                    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                       // if permissions have been granted, do the following 
                        permissionsGranted();
                    } else {
                        // possibly prompt why permissions are required and try again
                    }
                    return;
                }

                // other 'case' lines to check for other
                // permissions this app might request.
            }
        }

    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android Cordova插件中的请求权限不会提示用户

来自分类Dev

使用flutter启动时不会传播权限请求,而直接使用android启动时会传播

来自分类Dev

Android 6请求权限

来自分类Dev

Android:重新请求权限

来自分类Dev

Android 6请求权限

来自分类Dev

Android Chathead在启动时崩溃(无权限)

来自分类Dev

如何在Android的运行时请求权限?

来自分类Dev

Android,在代码中查找所有位置以请求权限

来自分类Dev

在Android 6.0中请求权限(API级别23)

来自分类Dev

如何为JUnit测试在Android Marshmallow上请求权限

来自分类Dev

Android 请求权限只请求第一个

来自分类Dev

在启动时启动Android服务

来自分类Dev

android broadcastreceiver在启动时自动启动

来自分类Dev

什么时候在运行时为Android Marshmallow 6.0请求权限?

来自分类Dev

Android SDK23查找更新和请求权限的地方

来自分类Dev

请求权限READ_SMS后,Android M中的Package Installer崩溃

来自分类Dev

Oracle MAF和Android 6.0中的请求权限(API级别23)

来自分类Dev

react-native 原生 android 模块是否需要请求权限?

来自分类Dev

启动时Spotify Android Intent Play

来自分类Dev

Android应用启动时的AlertDialog

来自分类Dev

启动时Android动画崩溃

来自分类Dev

Android主要活动无法在启动时启动

来自分类Dev

Android-在设备启动时立即启动程序

来自分类Dev

在运行时在android 6.0中请求权限时,应用程序名称不可见

来自分类Dev

请求权限

来自分类Dev

启动时的日志权限

来自分类Dev

Android在启动时动态设置菜单项

来自分类Dev

Android Geofencing应用程序在启动时崩溃

来自分类Dev

选择要在启动时加载的活动-Android

Related 相关文章

热门标签

归档