计算 Android 平板电脑上的所有图片
Count All Pictures on Android Tablet
我正在尝试以编程方式获取 Android 平板电脑图库中的图像(视频和图片)数量。如果重要的话,它是SM-T580。我能够让它与 android 手机一起使用,但无法让它与平板电脑一起使用。它必须抛出一个异常,因为应用程序崩溃了,但它没有提供任何有意义的信息,即使我在堆栈跟踪时也是如此。我不确定这里发生了什么。我将包括我的代码,该代码可在手机上运行,但在平板电脑上会爆炸。非常感谢任何帮助。
获取图库中所有图片的方法:
public int findAnyPictures(){
int count = 0;
final String[] columns = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID };
final String orderBy = MediaStore.Images.Media._ID;
//Stores all the images from the gallery in Cursor
Cursor cursor = getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
null, orderBy);
//Total number of images
if (cursor != null){
count = cursor.getCount();
}
cursor.close();
return count;
}
这里是统计所有视频的方法
public int findAnyVideos() {
int vidsCount = 0;
Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String[] projection = { MediaStore.Video.VideoColumns.DATA };
Cursor cursor = mContext.getContentResolver().query(uri, projection, null, null, null);
if (cursor != null) {
vidsCount = cursor.getCount();
cursor.close();
}
return vidsCount;
}
调用find any pictures时似乎抛出运行时异常,我不确定为什么它告诉我我没有适当的权限。我已经在 android 清单中包含了它提到的权限,但我不知道 grantUriPermission() 是什么?这是堆栈跟踪
java.lang.RuntimeException: 无法启动 activity ComponentInfo{com.example.thopfer.resetverify/com.example.thopfer.resetverify.MainActivity}: java.lang.SecurityException: 权限被拒绝:读取com.android.providers.media.MediaProvider uri 内容://media/external/images/media 来自 pid=22228,uid=10126 需要 android.permission.READ_EXTERNAL_STORAGE,或 grantUriPermission()
在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3305)
在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3401)
在 android.app.ActivityThread.access1100 美元(ActivityThread.java:229)
在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
在 android.os.Handler.dispatchMessage(Handler.java:102)
在 android.os.Looper.loop(Looper.java:148)
在 android.app.ActivityThread.main(ActivityThread.java:7303)
在 java.lang.reflect.Method.invoke(本机方法)
在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=22228, uid=10126 requires android.permission.READ_EXTERNAL_STORAGE, 或者grantUriPermission()
在 android.os.Parcel.readException(Parcel.java:1620)
在 android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
在 android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
在 android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
在 android.content.ContentResolver.query(ContentResolver.java:502)
在 android.content.ContentResolver.query(ContentResolver.java:445)
在 com.example.thopfer.resetverify.MainActivity.findAnyPictures(MainActivity.java:234)
在 com.example.thopfer.resetverify.MainActivity.onCreate(MainActivity.java:185)
在 android.app.Activity.performCreate(Activity.java:6904)
在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136)
在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3252)
在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3401)
在 android.app.ActivityThread.access1100 美元(ActivityThread.java:229)
在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
在 android.os.Handler.dispatchMessage(Handler.java:102)
在 android.os.Looper.loop(Looper.java:148)
在 android.app.ActivityThread.main(ActivityThread.java:7303)
在 java.lang.reflect.Method.invoke(本机方法)
在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
好吧,这告诉你问题所在
requires android.permission.READ_EXTERNAL_STORAGE
您必须在运行时为 Android API 23+ (Android 6.0+) 请求权限。更多相关信息:https://developer.android.com/training/permissions/requesting.html
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
REQUEST_CODE);
}
您将在 onRequestPermissionsResult 中得到答案。
我正在尝试以编程方式获取 Android 平板电脑图库中的图像(视频和图片)数量。如果重要的话,它是SM-T580。我能够让它与 android 手机一起使用,但无法让它与平板电脑一起使用。它必须抛出一个异常,因为应用程序崩溃了,但它没有提供任何有意义的信息,即使我在堆栈跟踪时也是如此。我不确定这里发生了什么。我将包括我的代码,该代码可在手机上运行,但在平板电脑上会爆炸。非常感谢任何帮助。
获取图库中所有图片的方法:
public int findAnyPictures(){
int count = 0;
final String[] columns = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID };
final String orderBy = MediaStore.Images.Media._ID;
//Stores all the images from the gallery in Cursor
Cursor cursor = getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
null, orderBy);
//Total number of images
if (cursor != null){
count = cursor.getCount();
}
cursor.close();
return count;
}
这里是统计所有视频的方法
public int findAnyVideos() {
int vidsCount = 0;
Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String[] projection = { MediaStore.Video.VideoColumns.DATA };
Cursor cursor = mContext.getContentResolver().query(uri, projection, null, null, null);
if (cursor != null) {
vidsCount = cursor.getCount();
cursor.close();
}
return vidsCount;
}
调用find any pictures时似乎抛出运行时异常,我不确定为什么它告诉我我没有适当的权限。我已经在 android 清单中包含了它提到的权限,但我不知道 grantUriPermission() 是什么?这是堆栈跟踪
java.lang.RuntimeException: 无法启动 activity ComponentInfo{com.example.thopfer.resetverify/com.example.thopfer.resetverify.MainActivity}: java.lang.SecurityException: 权限被拒绝:读取com.android.providers.media.MediaProvider uri 内容://media/external/images/media 来自 pid=22228,uid=10126 需要 android.permission.READ_EXTERNAL_STORAGE,或 grantUriPermission() 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3305) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3401) 在 android.app.ActivityThread.access1100 美元(ActivityThread.java:229) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:7303) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=22228, uid=10126 requires android.permission.READ_EXTERNAL_STORAGE, 或者grantUriPermission() 在 android.os.Parcel.readException(Parcel.java:1620) 在 android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) 在 android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) 在 android.content.ContentProviderProxy.query(ContentProviderNative.java:421) 在 android.content.ContentResolver.query(ContentResolver.java:502) 在 android.content.ContentResolver.query(ContentResolver.java:445) 在 com.example.thopfer.resetverify.MainActivity.findAnyPictures(MainActivity.java:234) 在 com.example.thopfer.resetverify.MainActivity.onCreate(MainActivity.java:185) 在 android.app.Activity.performCreate(Activity.java:6904) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3252) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3401) 在 android.app.ActivityThread.access1100 美元(ActivityThread.java:229) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:7303) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
好吧,这告诉你问题所在
requires android.permission.READ_EXTERNAL_STORAGE
您必须在运行时为 Android API 23+ (Android 6.0+) 请求权限。更多相关信息:https://developer.android.com/training/permissions/requesting.html
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
REQUEST_CODE);
}
您将在 onRequestPermissionsResult 中得到答案。