应用实例如何访问Android provider
时间: 2024-05-09 14:19:36 浏览: 14
访问 Android provider 的方法取决于你想要访问的 provider 类型。以下是一些常见的 provider 类型和其访问方法:
1. Content Provider:Content Provider 是最常见的 provider 类型,用于共享应用程序数据。要访问 Content Provider,需要使用 ContentResolver 类。例如,以下代码将查询名为 "contacts" 的 Content Provider,并返回所有联系人的姓名和电话号码:
```
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] {ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER};
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
do {
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.d(TAG, "Name: " + name + ", Number: " + number);
} while (cursor.moveToNext());
}
```
2. File Provider:File Provider 用于在应用程序之间共享文件。要访问 File Provider,需要使用 FileProvider 类。例如,以下代码将获取名为 "myFile.txt" 的文件的 Uri:
```
File file = new File(getFilesDir(), "myFile.txt");
Uri fileUri = FileProvider.getUriForFile(this, "com.example.myapp.fileprovider", file);
```
3. Media Provider:Media Provider 用于访问设备上的图像、音频和视频文件。要访问 Media Provider,需要使用 MediaStore 类。例如,以下代码将查询名为 "external" 的 Media Provider,并返回所有图像的 Uri:
```
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = new String[] {MediaStore.Images.Media._ID};
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
do {
long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID));
Uri imageUri = Uri.withAppendedPath(uri, "" + id);
Log.d(TAG, "Image Uri: " + imageUri.toString());
} while (cursor.moveToNext());
}
```
无论你要访问哪种类型的 provider,都需要获取 ContentResolver 对象,并使用它来执行查询、插入、更新和删除操作。