首頁 >Java >java教程 >在 Android Marshmallow 中建立目錄有什麼問題?

在 Android Marshmallow 中建立目錄有什麼問題?

DDD
DDD原創
2024-10-24 03:22:46549瀏覽

What is the issue with creating a directory in Android Marshmallow?

Android Marshmallow中建立目錄時的問題

在Android 5.0中,使用本機應用程式建立目錄時運作正常。但在Android 6.0(Marshmallow)中,有時會工作,有時不會。以下是如何建立新目錄的程式碼。目錄用於保存影片和圖像檔案。

<code class="java">public static void createApplicationFolder() {
    File f = new File(Environment.getExternalStorageDirectory(), File.separator + Config.VIDEO_COMPRESSOR_APPLICATION_DIR_NAME);
    f.mkdirs();
    f = new File(Environment.getExternalStorageDirectory(), File.separator + Config.VIDEO_COMPRESSOR_APPLICATION_DIR_NAME + Config.VIDEO_COMPRESSOR_COMPRESSED_VIDEOS_DIR);
    f.mkdirs();
    f = new File(Environment.getExternalStorageDirectory(), File.separator + Config.VIDEO_COMPRESSOR_APPLICATION_DIR_NAME + Config.VIDEO_COMPRESSOR_TEMP_DIR);
    f.mkdirs();

}</code>

解決方案:

為了解決此問題,需要在清單檔案中加入此權限:

<code class="xml"><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /></code>

還需要在清單檔案中加入此權限:

<code class="java">public class MyDevIDS extends AppCompatActivity {

    private static final int REQUEST_RUNTIME_PERMISSION = 123;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (CheckPermission(MyDevIDS.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
            // 具有权限,继续执行
            createApplicationFolder();
        } else {
            // 没有权限,请求运行时权限
            RequestPermission(MyDevIDS.this, Manifest.permission.WRITE_EXTERNAL_STORAGE, REQUEST_RUNTIME_PERMISSION);
        }
    }

    @Override
    public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults) {

        switch (permsRequestCode) {

            case REQUEST_RUNTIME_PERMISSION: {
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // 具有权限,继续执行
                    createApplicationFolder();
                } else {
                    // 没有权限,显示吐司
                }
                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;
        }
    }
}</code>

還需要在應用程式首次運行時請求運行時權限。這是修改後的程式碼:

新增此程式碼後,將始終在首次執行應用程式時請求建立目錄的權限。

以上是在 Android Marshmallow 中建立目錄有什麼問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn