【问题标题】:Android 6.0 Settings Permission befor Splash ScreenAndroid 6.0 启动屏幕前的设置权限
【发布时间】:2016-12-03 03:19:41
【问题描述】:

您好,我的应用程序从 API 18 到 API 22 都可以正常工作。 对于新的 Android API 23,我正在尝试设置我在 Manifest 上设置的检查权限。我正在使用 Dexter 库。现在我希望启用权限的对话框设置显示在我的初始屏幕之前,当我在对话框权限上单击“确定”时,应用程序保持打开并显示我的介绍视图和主视图之后。 我已经设置了在启动屏幕运行期间工作的代码,当我为启用权限设置确定时,应用程序关闭而不是保持打开状态。 这是我的启动画面和 dexter 库代码:

public class SplashScreen extends Activity {


//Set waktu lama splashscreen
private static int splashInterval = 3000;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Fabric.with(this, new Answers());
    Dexter.initialize(getApplicationContext());
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.splash_fragment);









    new Handler().postDelayed(new Runnable() {


        @Override
        public void run() {
            View v = findViewById(android.R.id.content);

            if (ActivityCompat.checkSelfPermission(getApplicationContext(),
                    android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager
                    .PERMISSION_GRANTED && ActivityCompat
                    .checkSelfPermission(getApplicationContext(),
                            android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager
                    .PERMISSION_GRANTED) {

                MultiplePermissionsListener snackbarMultiplePermissionsListener =
                        SnackbarOnAnyDeniedMultiplePermissionsListener.Builder
                                .with((ViewGroup) v.getRootView(),"")
                                .withOpenSettingsButton("Settings")
                                .withCallback(new Snackbar.Callback() {
                                    @Override
                                    public void onShown(Snackbar snackbar) {
                                        // Event handler for when the given Snackbar has been dismissed
                                    }
                                    @Override
                                    public void onDismissed(Snackbar snackbar, int event) {
                                        // Event handler for when the given Snackbar is visible
                                    }
                                })
                                .build();
                Dexter.checkPermissions(snackbarMultiplePermissionsListener, android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.GET_ACCOUNTS);
                return;


            }

            Intent i = new Intent(SplashScreen.this, MainActivity.class);
            startActivity(i);


            //jeda selesai Splashscreen
            this.finish();
        }

        private void finish() {
            // TODO Auto-generated method stub

        }
    }, splashInterval);

};

}

如何在启动屏幕之前显示此对话框设置并在单击确定以启用权限后保持应用打开?

谢谢

【问题讨论】:

  • 你有什么解决办法吗?如果是,请发布

标签: permissions splash-screen android-6.0-marshmallow


【解决方案1】:
private void displaySplashScreen() {
    new Handler().postDelayed(new Runnable() {

        /*
         * Showing splash screen with a timer. This will be useful when you
         * want to show case your app logo / company
         */

        @Override
        public void run() {
            Intent i = new Intent(SplashActivity.this, LoginActivity.class);
            startActivity(i);
            finish();
        }
    }, SPLASH_TIME_OUT);
}

private void setPermissionForM() {
    String[] PERMISSIONS = {
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.ACCESS_COARSE_LOCATION,
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.CAMERA,
            Manifest.permission.READ_PHONE_STATE};

    if (!utils.hasPermissions(this, PERMISSIONS)) {
        ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            Map<String, Integer> perms = new HashMap<String, Integer>();
            // Initial
            perms.put(Manifest.permission.WRITE_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED);
            perms.put(Manifest.permission.ACCESS_COARSE_LOCATION, PackageManager.PERMISSION_GRANTED);
            perms.put(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED);
            perms.put(Manifest.permission.CAMERA, PackageManager.PERMISSION_GRANTED);
            perms.put(Manifest.permission.READ_PHONE_STATE, PackageManager.PERMISSION_GRANTED);
            for (int i = 0; i < permissions.length; i++)
                perms.put(permissions[i], grantResults[i]);
            if (perms.get(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
                    && perms.get(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
                    && perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
                    && perms.get(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED
                    && perms.get(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
                // All Permissions Granted
                displaySplashScreen();
            } else {
                // Permission Denied
                Toast.makeText(SplashActivity.this, "Some Permission is Denied", Toast.LENGTH_SHORT)
                        .show();
            }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    相关资源
    最近更新 更多