HuanTanSheng/EasyPhotos

Vivo手机必现bug;选择视频,点击预览。

Opened this issue · 3 comments

java.lang.SecurityException: UID 10194 does not have permission to content://media/external/video/media/1962 [user 0]
at android.os.Parcel.createExceptionOrNull(Parcel.java:2387)
at android.os.Parcel.createException(Parcel.java:2371)
at android.os.Parcel.readException(Parcel.java:2354)
at android.os.Parcel.readException(Parcel.java:2296)
at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:4033)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1773)
at android.app.Activity.startActivityForResult(Activity.java:5427)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:676)
at android.app.Activity.startActivityForResult(Activity.java:5385)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:663)
at android.app.Activity.startActivity(Activity.java:5771)
at android.app.Activity.startActivity(Activity.java:5724)
at com.huantansheng.easyphotos.ui.adapter.PreviewPhotosAdapter.toPlayVideo(PreviewPhotosAdapter.java:134)
at com.huantansheng.easyphotos.ui.adapter.PreviewPhotosAdapter.access$000(PreviewPhotosAdapter.java:33)
at com.huantansheng.easyphotos.ui.adapter.PreviewPhotosAdapter$1.onClick(PreviewPhotosAdapter.java:75)
at android.view.View.performClick(View.java:7505)
at android.view.View.performClickInternal(View.java:7477)
at android.view.View.access$3600(View.java:824)
at android.view.View$PerformClick.run(View.java:28702)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:257)
at android.app.ActivityThread.main(ActivityThread.java:8215)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1031)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.uri.UriGrantsManagerService.checkGrantUriPermissionUnlocked(UriGrantsManagerService.java:1361)
at com.android.server.uri.UriGrantsManagerService.checkGrantUriPermissionFromIntentUnlocked(UriGrantsManagerService.java:654)
at com.android.server.uri.UriGrantsManagerService.access$1000(UriGrantsManagerService.java:123)
at com.android.server.uri.UriGrantsManagerService$LocalService.checkGrantUriPermissionFromIntent(UriGrantsManagerService.java:1532)
at com.android.server.wm.ActivityStarter$Request.resolveActivity(ActivityStarter.java:637)

vivo S9 Android11

private void toPlayVideo(View v, Uri uri, String type) {
    Context context = v.getContext();
    Intent intent = new Intent(Intent.ACTION_VIEW);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.putExtra(Intent.EXTRA_STREAM, uri);
    }
    intent.setDataAndType(uri, type);
    context.startActivity(intent);
}

将源码修改为上述代码,播放视频只需要使用读取权限并添加‘EXTRA_STREAM’

@SmilingBoy

你可以使用javassist来覆盖掉toPlayVideo这个方法的逻辑
最好的办法还是fork项目进行修复,然后打包

我看他项目里的代码是和你这个一样的,是不是作者打包的时候改了啥