Android无法打开相册查看视频

最近公司做了一个项目需要查看手机视频,在android 8的模拟器上正常。在android 5.1的模拟器下却报了一个错误:

 Caused by: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.PICK dat=content://media/external/video/media 
cmp=com.android.music/.VideoBrowserActivity } from ProcessRecord{1b308dad 5422:com.videoclipper.demo/u0a58} (pid=5422, uid=10058) not exported from uid 10036

讲道理不应该有权限问题的。因为target为21,而且api22没有运行时权限,android 8也可以正常运行。这个现象真的很莫名其妙啊。经过搜索找到了一种解决方法:原文

// contentId will have the video content id as given by Content Resolver
// In this nparticular application, contentId is retrieved from ListActivity with custom adapter

Uri contentUri = ContentUris.withAppendedId(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, contentId);

try {
    Intent intent = new Intent(Intent.ACTION_VIEW, contentUri);
    startActivity(intent);
} 
catch (ActivityNotFoundException e) {//SecurityException 也可以
    Toast.makeText(this, "Not Supported", Toast.LENGTH_SHORT).show();
}

要调用 Gallery browser 使用以下代码:

someMethod() {
   Intent intent = new Intent(Intent.ACTION_PICK, null);
   intent.setType("video/*");
   startActivityForResult(intent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if ((requestCode == 1) && (resultCode == RESULT_OK) && (data != null)) {

        Log.i("---------------------", data.getData().getEncodedPath());
        mIntentFromGallery = data;

        Intent intent = new Intent(Intent.ACTION_MAIN, null);
        intent.setType("video/*");
        intent.setData(data.getData());
        try
        {
            startActivity(intent);
        }
        catch(Exception e)
        {
        }


    } else {
        setResult(RESULT_CANCELED);
        finish();
    }
}

综合起来的解决方案就是:

           Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
            intent.setDataAndType(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, "video/*");
            startActivityForResult(intent, REQUEST_CODEE_VIDEO);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏项勇

笔记71 | Intent分享内容(文本,图片,视频)

1837
来自专栏Android小菜鸡

Webview与H5交互——支持Intput type=”file“属性

  利用原生加H5进行混合开发时,遇到问题:在H5利用Input type=“file” 调用android本地图库上传图片时,在普通浏览器可以执行,在Webv...

1751
来自专栏上善若水

009android初级篇之APP中使用系统相机相册等集成应用

这是第一种方式 在启动相机前先指定好图片的文件位置,通知intent,同时也保留在成员变量中。然后在函数中,可以直接打开该文件

1284
来自专栏后端之路

android 壁纸设置分析

最近组织上派遣了我一个任务,最终目的只有一个,就是看看launcher你的wallpaper设置的流程。 废话不多说,直接看源码。 tips:在com.andr...

2127
来自专栏封碎

startActivity的requires new task异常解析 博客分类: Android小技巧 Android工作

Caused by: android.util.AndroidRuntimeException: Calling startActivity() from ou...

1124
来自专栏项勇

笔记40 | Android通讯之Intent的简单使用

1917
来自专栏酷玩时刻

Android极速开发之Apk安装

安装之前判断是否有root权限,如果有root权限就静默安转,如果没有就利用意图进行安装。源码参考地址

1203
来自专栏静晴轩

Android之Intent用法全面总结

[代码] 调用拨号程序 // 给移动客服10086拨打电话 Uri uri = Uri.parse("tel:10086"); Intent intent = ...

3407
来自专栏潇涧技术专栏

Android Development Code Snippets

771
来自专栏生信小驿站

R语言 排序问题

1382

扫码关注云+社区