安卓8

安卓8.0开发读取SD卡的原理或详细介绍,主要涉及到安卓存储管理机制的改变和权限管理方式的更新。

在安卓8.0之前的版本中,应用程序只需要申请外部存储权限,就可以随意访问SD卡上的文件。然而这种方式存在一个很大的问题,即应用程序可以随意访问所有SD卡上的文件,而用户并没有对此进行明确的授权。这使得数据的安全受到了威胁,同时给攻击者留下了可乘之机。

为了解决这个问题,安卓8.0对SD卡的存储管理机制进行了改变。在8.0之后,应用程序只能访问它自己创建的目录和文件,而不能访问SD卡上的其他文件。

下面我们来具体了解一下安卓8.0开发读取SD卡的方法:

1. 在Manifest文件中声明权限

为了访问SD卡上的文件,首先需要在Manifest文件中声明权限。具体声明方法如下:

```

    

    

    ...

```

其中,`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`分别表示读取和写入外部存储的权限。

2. 运行时请求权限

在安卓8.0及以上版本中,需要在运行时请求权限。该过程涉及到两个步骤:

(1)在Activity中检查是否有权限:

```

private boolean checkPermission() {

    int readPermission = ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);

    int writePermission = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);

    return readPermission == PackageManager.PERMISSION_GRANTED && writePermission == PackageManager.PERMISSION_GRANTED;

}

```

(2)如果没有权限,则请求权限:

```

private void requestPermission() {

    ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);

}

```

其中`REQUEST_CODE`是请求码,用于在后续回调函数中判断请求的是哪种权限。

3. 读取SD卡上的文件

当用户授权后,就可以读取SD卡上的文件了。读取SD卡上的文件有很多方式,其中比较常见的方式有以下两种:

(1)使用`Environment.getExternalStorageDirectory()`获取SD卡的根目录,例如:

```

File sdcard = Environment.getExternalStorageDirectory();

File file = new File(sdcard.getAbsolutePath() + "/test.txt");

```

(2)使用ContentProvider访问SD卡上的文件,例如:

```

Uri uri = MediaStore.Files.getContentUri("external");

Cursor cursor = getContentResolver().query(uri, null, null, null, null);

if (cursor!=null) {

    while ( cursor.moveToNext()) {

        String filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA));

    }

    cursor.close();

}

```

以上是安卓8.0开发读取SD卡的原理或详细介绍,通过Manifest文件的权限声明、运行时的权限请求和读取SD卡上的文件,可以实现对SD卡的访问。但需要注意的是,在访问SD卡的过程中,需要考虑到用户的隐私和安全,避免泄露用户的个人信息。

川公网安备 51019002001728号