要从存储访问框架(Storage Access Framework)中获取存储(SD卡)的大小(总大小或可用大小),您可以使用以下代码示例:
首先,添加以下权限到AndroidManifest.xml文件中:
然后,使用以下代码获取存储的大小:
import android.annotation.SuppressLint;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getStorageSize();
}
@SuppressLint("NewApi")
private void getStorageSize() {
Uri uri = MediaStore.Files.getContentUri("external");
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(uri, null, null, null, null, null);
long totalSize = 0;
long availableSize = 0;
if (cursor != null) {
while (cursor.moveToNext()) {
String fileSize = cursor.getString(cursor.getColumnIndex(DocumentsContract.Document.COLUMN_SIZE));
totalSize += Long.parseLong(fileSize);
}
cursor.close();
}
Log.d(TAG, "Total storage size: " + totalSize);
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long blockSize = stat.getBlockSizeLong();
long availableBlocks = stat.getAvailableBlocksLong();
availableSize = availableBlocks * blockSize;
Log.d(TAG, "Available storage size: " + availableSize);
}
}
上述代码使用MediaStore.Files.getContentUri("external")
获取存储的内容URI,并通过查询DocumentsContract.Document.COLUMN_SIZE
来获取每个文件的大小,然后累加得到存储的总大小。
另外,代码还使用Environment.getExternalStorageDirectory().getPath()
获取外部存储目录的路径,并使用StatFs
类来获取可用的存储大小。
请注意,这些代码需要在Android Q (API 29)及更高版本上运行,并且需要在运行时请求存储权限。