当前位置:   article > 正文

Android 调用系统相册选取视频,过滤视频(兼容小米)_小米手机intent.action_get_content

小米手机intent.action_get_content

老规矩先上图,注:我这个是其他类型设备的样式图,小米也一样的



由于小米手机可能对很多地方不见让,当然对调用系统相机时也跟其他设备不太一

样,一般情况下他都是底下弹出一个框,选取是否进入相册或者文件夹


下面就来贴一下代码

这是在选取相册选取视频的页面

  1. if(PhoneInfo.isMIUI()){//是否是小米设备,是的话用到弹窗选取入口的方法去选取视频
  2. Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
  3. intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"video/*");
  4. startActivityForResult(Intent.createChooser(intent, "选择要导入的视频"), REQUEST_CODE_PICK);
  5. }else{//直接跳到系统相册去选取视频
  6. Intent intent = new Intent();
  7. if (Build.VERSION.SDK_INT < 19) {
  8. intent.setAction(Intent.ACTION_GET_CONTENT);
  9. intent.setType("video/*");
  10. } else {
  11. intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
  12. intent.addCategory(Intent.CATEGORY_OPENABLE);
  13. intent.setType("video/*");
  14. }
  15. startActivityForResult(Intent.createChooser(intent, "选择要导入的视频"), REQUEST_CODE_PICK);
  16. }

我们写一下在相册选取视频之后的回调

  1. @Override
  2. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  3. super.onActivityResult(requestCode, resultCode, data);
  4. if (requestCode == REQUEST_CODE_PICK && resultCode == RESULT_OK) {//从相册选取视频
  5. String videoPath = GetPathFromUri.getPath(this, data.getData());
  6. initVideo(videoPath);
  7. }
  8. }

在这里我把获取路径封装成了一个类,贴一下这个类的代吗

  1. public class GetPathFromUri {
  2. @SuppressLint("NewApi")
  3. public static String getPath(final Context context, final Uri uri) {
  4. final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
  5. // DocumentProvider
  6. if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
  7. // ExternalStorageProvider
  8. if (isExternalStorageDocument(uri)) {
  9. final String docId = DocumentsContract.getDocumentId(uri);
  10. final String[] split = docId.split(":");
  11. final String type = split[0];
  12. if ("primary".equalsIgnoreCase(type)) {
  13. return Environment.getExternalStorageDirectory() + "/" + split[1];
  14. }
  15. // TODO handle non-primary volumes
  16. }
  17. // DownloadsProvider
  18. else if (isDownloadsDocument(uri)) {
  19. final String id = DocumentsContract.getDocumentId(uri);
  20. final Uri contentUri = ContentUris.withAppendedId(
  21. Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
  22. return getDataColumn(context, contentUri, null, null);
  23. }
  24. // MediaProvider
  25. else if (isMediaDocument(uri)) {
  26. final String docId = DocumentsContract.getDocumentId(uri);
  27. final String[] split = docId.split(":");
  28. final String type = split[0];
  29. Uri contentUri = null;
  30. if ("image".equals(type)) {
  31. contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
  32. } else if ("video".equals(type)) {
  33. contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
  34. } else if ("audio".equals(type)) {
  35. contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
  36. }
  37. final String selection = "_id=?";
  38. final String[] selectionArgs = new String[]{split[1]};
  39. return getDataColumn(context, contentUri, selection, selectionArgs);
  40. }
  41. }
  42. // MediaStore (and general)
  43. else if ("content".equalsIgnoreCase(uri.getScheme())) {
  44. return getDataColumn(context, uri, null, null);
  45. }
  46. // File
  47. else if ("file".equalsIgnoreCase(uri.getScheme())) {
  48. return uri.getPath();
  49. }
  50. return null;
  51. }
  52. /**
  53. * Get the value of the data column for this Uri. This is useful for
  54. * MediaStore Uris, and other file-based ContentProviders.
  55. *
  56. * @param context The context.
  57. * @param uri The Uri to query.
  58. * @param selection (Optional) Filter used in the query.
  59. * @param selectionArgs (Optional) Selection arguments used in the query.
  60. * @return The value of the _data column, which is typically a file path.
  61. */
  62. public static String getDataColumn(Context context, Uri uri, String selection,
  63. String[] selectionArgs) {
  64. Cursor cursor = null;
  65. final String column = "_data";
  66. final String[] projection = {column};
  67. try {
  68. cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
  69. null);
  70. if (cursor != null && cursor.moveToFirst()) {
  71. final int column_index = cursor.getColumnIndexOrThrow(column);
  72. return cursor.getString(column_index);
  73. }
  74. } finally {
  75. if (cursor != null)
  76. cursor.close();
  77. }
  78. return null;
  79. }
  80. /**
  81. * @param uri The Uri to check.
  82. * @return Whether the Uri authority is ExternalStorageProvider.
  83. */
  84. public static boolean isExternalStorageDocument(Uri uri) {
  85. return "com.android.externalstorage.documents".equals(uri.getAuthority());
  86. }
  87. /**
  88. * @param uri The Uri to check.
  89. * @return Whether the Uri authority is DownloadsProvider.
  90. */
  91. public static boolean isDownloadsDocument(Uri uri) {
  92. return "com.android.providers.downloads.documents".equals(uri.getAuthority());
  93. }
  94. /**
  95. * @param uri The Uri to check.
  96. * @return Whether the Uri authority is MediaProvider.
  97. */
  98. public static boolean isMediaDocument(Uri uri) {
  99. return "com.android.providers.media.documents".equals(uri.getAuthority());
  100. }
  101. }




我在这里判断了是否是小米手机,判断识别是否是小米设备可以参考我的另一篇博客

Android 判断手机设备是否是小米设备,是因为我目前遇到的是小米设备会有这种问

题需要处理,其他手机如果用这种方法的话可能会多此一举了,具体也是看需求了,我们看下如果其他手机用这种方法的情况下的效果图.




声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号