Android Scoped Directory Access 教程

随笔4个月前发布 李秋
32 0 0

Android Scoped Directory Access 教程

android-ScopedDirectoryAccessThis sample has been deprecated/archived. Check this repo for related samples:项目地址:https://gitcode.com/gh_mirrors/an/android-ScopedDirectoryAccess

项目介绍

Android Scoped Directory Access 是一个开源项目,旨在帮助开发者更好地管理和访问Android设备上的特定目录。该项目基于Android的Scoped Storage模型,该模型在Android 10(API级别29)中引入,以增强用户对文件的控制和提高应用安全性。Scoped Storage限制了应用对共享存储(如外部存储或SD卡)的直接访问,而是为每个应用提供了一个隔离的沙箱,用于存储和访问文件。

项目快速启动

添加依赖

首先,在您的build.gradle文件中添加以下依赖项:




dependencies {


    implementation 'com.google.android.material:material:1.4.0'


    implementation 'androidx.activity:activity:1.2.0'


}

请求目录访问权限

在您的应用中,使用以下代码请求特定目录的访问权限:




import android.Manifest;


import android.content.Intent;


import android.content.pm.PackageManager;


import android.os.Bundle;


import android.os.Environment;


import android.widget.Toast;


import androidx.activity.result.ActivityResultLauncher;


import androidx.activity.result.contract.ActivityResultContracts;


import androidx.appcompat.app.AppCompatActivity;


import androidx.core.content.ContextCompat;


 


public class MainActivity extends AppCompatActivity {


 


    private ActivityResultLauncher<Intent> scopedDirectoryAccessLauncher;


 


    @Override


    protected void onCreate(Bundle savedInstanceState) {


        super.onCreate(savedInstanceState);


        setContentView(R.layout.activity_main);


 


        scopedDirectoryAccessLauncher = registerForActivityResult(


                new ActivityResultContracts.StartActivityForResult(),


                result -> {


                    if (result.getResultCode() == RESULT_OK) {


                        // 处理目录访问结果


                        Toast.makeText(this, "目录访问成功", Toast.LENGTH_SHORT).show();


                    } else {


                        Toast.makeText(this, "目录访问失败", Toast.LENGTH_SHORT).show();


                    }


                });


 


        requestScopedDirectoryAccess();


    }


 


    private void requestScopedDirectoryAccess() {


        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {


            // 请求权限


            Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);


            scopedDirectoryAccessLauncher.launch(intent);


        } else {


            // 已经拥有权限


            Toast.makeText(this, "已经拥有目录访问权限", Toast.LENGTH_SHORT).show();


        }


    }


}

应用案例和最佳实践

应用案例

Scoped Directory Access 可以用于多种应用场景,例如:

文件管理器:允许用户选择和管理特定目录中的文件。备份应用:允许用户选择备份目录,以便进行数据备份。媒体编辑应用:允许用户选择媒体文件所在的目录进行编辑。

最佳实践

明确权限请求:在请求目录访问权限时,确保向用户清楚地说明请求权限的目的。处理权限拒绝:如果用户拒绝授予权限,应提供适当的反馈和指导。定期检查权限:定期检查应用是否仍然拥有所需的目录访问权限,并在必要时重新请求权限。

典型生态项目

Scoped Directory Access 是Android Scoped Storage生态系统的一部分,与以下项目紧密相关:

MediaStore API:用于访问和管理媒体文件。Storage Access Framework (SAF):提供了一种标准的方式来访问存储在设备上的文件和目录。FileProvider:用于安全地共享文件,特别是在应用之间共享文件时。

通过结合这些项目,开发者可以构建出更加强大和安全的文件管理功能,同时确保用户数据的隐私和安全。

android-ScopedDirectoryAccessThis sample has been deprecated/archived. Check this repo for related samples:项目地址:https://gitcode.com/gh_mirrors/an/android-ScopedDirectoryAccess

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...