關(guān)于Android6.0沒有彈出運(yùn)行時(shí)權(quán)限彈窗的問題

問題描述

如題,在Android6.0的手機(jī)上如果需要使用到權(quán)限的時(shí)候,是會(huì)彈出框讓用戶授權(quán),如果拒絕則會(huì)造成APP某些功能不能使用或者直接Crash。

而且有的時(shí)候,并不會(huì)彈窗,使用某功能的時(shí)候直接的就crash了,如果不了解運(yùn)行時(shí)權(quán)限的話,查看日志發(fā)現(xiàn)沒有權(quán)限,但是自己明明在manifest是聲明過權(quán)限,造成分析問題困難。原因就在于此,運(yùn)行時(shí)權(quán)限沒有彈出來。

我遇到的問題是要去在手機(jī)上新建目錄不成功。

解決思路

來直接上代碼

public class MainActivity extends AppCompatActivity {
    private static final int REQUEST_RUNTIME_PERMISSION = 123;
    private static final String DATA_PATH = Environment.getExternalStorageDirectory().toString() + "/Test/";
    private static final String TESTDATA = "testdata"
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //android6.0手機(jī)上權(quán)限問題不能創(chuàng)建目錄導(dǎo)致崩潰
        if (CheckPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
            // you have permission go ahead
            prepareDirectory(DATA_PATH + TESTDATA);
        } else {
            // you do not have permission go request runtime permissions
            RequestPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE, REQUEST_RUNTIME_PERMISSION);
        }
    }
    @Override
    public void onRequestPermissionsResult(int permsRequestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (permsRequestCode) {

            case REQUEST_RUNTIME_PERMISSION: {
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // you have permission go ahead
                    prepareDirectory(DATA_PATH + TESTDATA);
                } else {
                    // you do not have permission show toast.
                }
                return;
            }
        }
    }
    public void RequestPermission(Activity thisActivity, String Permission, int Code) {
        if (ContextCompat.checkSelfPermission(thisActivity,
                Permission)
                != PackageManager.PERMISSION_GRANTED) {
            if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
                    Permission)) {
            } else {
                ActivityCompat.requestPermissions(thisActivity,
                        new String[]{Permission},
                        Code);
            }
        }
    }

    public boolean CheckPermission(Context context, String Permission) {
        if (ContextCompat.checkSelfPermission(context,
                Permission) == PackageManager.PERMISSION_GRANTED) {
            return true;
        } else {
            return false;
        }
    }

    private void prepareDirectory(String path) {

        File dir = new File(path);
        if (!dir.exists()) {
            if (!dir.mkdirs()) {
                Log.e(TAG, "ERROR: Creation of directory " + path + " failed, check does Android Manifest have permission to write to external storage.");
            }
        } else {
            Log.i(TAG, "Created directory " + path);
        }
    }
}

相信代碼很容易看懂,如果小伙伴有更好的方法,可以告訴我。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容