簡體   English   中英

android - 如果用戶未授予 WRITE_EXTERNAL_STORAGE 權限,則關閉應用程序

[英]android - close app if user not granting WRITE_EXTERNAL_STORAGE permission

在 android 6 或更高版本中,當用戶第一次打開應用程序時,如果他不允許,則向他詢問一些許可,然后退出應用程序

我的應用程序的一些必須要求的權限是讀寫外部存儲,如何實現這一點

我試過這個

if (Build.VERSION.SDK_INT >= 23) {
                if (ContextCompat.checkSelfPermission(LoginActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                        != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(LoginActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE)
                        != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(LoginActivity.this,
                            new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.READ_EXTERNAL_STORAGE},
                            1);
                } else {
                    //do something
                }
            } else {
                    //do something
            }

您需要讀取onRequestPermissionsResult()的結果,如果用戶拒絕了權限,請調用context.finish()context.finishAffinity() 類似於... 編輯:查看文檔以了解如何處理權限: Android 6 Permissions

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
        switch (requestCode) {
            case MAIN_PERMISSIONS:
                if (grantResults.length > 0) {
                    // Validate the permissions result
                    if (permissionsOk) {
                        // All good
                    } else {
                        // Close your app
                        closeNow();
                    }
                }
                break;
        }
    }

    private void closeNow() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            finishAffinity();
        } else {
            finish();
        }
    }

使用@G 的建議。 布里西達 - 林斯

我解決了它,如果其他人需要同樣的東西,我會在這里寫我的答案,

這是我在 MainActivity 中編寫的所有代碼:

    if(Build.VERSION.SDK_INT >= 23)
            {
                if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
                                                        != PackageManager.PERMISSION_GRANTED ||
                    ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE)
                                                        != PackageManager.PERMISSION_GRANTED)
                {
     ActivityCompat.requestPermissions(MainActivity.this,
                                new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.READ_EXTERNAL_STORAGE},
                                1);
    }
                else
                {
                    //do something
                }
            }
}

這是覆蓋方法 onRequestPermissionsResult:

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        switch(requestCode)
        {
            case 1:
                if (grantResults.length > 0  && grantResults[0] == PackageManager.PERMISSION_GRANTED)
                {
                     // i am creating folder in external storage here
                 File create_dir=new File(Environment.getExternalStorageDirectory()+"/uca/");

                 Toast.makeText(this,"creating",Toast.LENGTH_LONG).show();
                 create_dir.mkdirs();

                }
                else
                {
                    closeNow();
                }
                break;
        }
    }

這是接近的方法:

private void closeNow() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
        {
            finishAffinity();
        }

        else
        {
            finish();
        }
    }

您的應用程序因運行時異常而非許可而關閉。 只需在運行應用程序時打開 logcat 並檢查異常或錯誤。

我希望它對你有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM