AbedElazizShe / LightCompressor

A powerful and easy-to-use video compression library for android uses MediaCodec API.
Apache License 2.0
518 stars 117 forks source link

Getting Error regarding permissions #41

Closed mishra0007 closed 3 years ago

mishra0007 commented 3 years ago

I have provided 4 permission

uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION uses-permission android:name="android.permission.CAMERA

and even given permission to my testing device.

D/path: /storage/emulated/0/download/Class 12 Maths - Continuity and Differentiation - Reuploaded (first video freezed on YouTube).mp4 W/System.err: java.io.FileNotFoundException: /storage/emulated/0/download/Class 12 Maths - Continuity and Differentiation - Reuploaded (first video freezed on YouTube).mp4: open failed: EACCES (Permission denied) W/System.err: at libcore.io.IoBridge.open(IoBridge.java:496) at java.io.FileInputStream.(FileInputStream.java:159) at com.example.video_compressor.MainActivity.saveVideoToInternalStorage(MainActivity.java:175) at com.example.video_compressor.MainActivity.onActivityResult(MainActivity.java:111) at android.app.Activity.dispatchActivityResult(Activity.java:8249) at android.app.ActivityThread.deliverResults(ActivityThread.java:4931) at android.app.ActivityThread.handleSendResult(ActivityThread.java:4979) at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2044) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:224) at android.app.ActivityThread.main(ActivityThread.java:7562) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950) Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied) W/System.err: at libcore.io.Linux.open(Native Method) at libcore.io.ForwardingOs.open(ForwardingOs.java:167) at libcore.io.BlockGuardOs.open(BlockGuardOs.java:252) at libcore.io.ForwardingOs.open(ForwardingOs.java:167) at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:7461) at libcore.io.IoBridge.open(IoBridge.java:482) ... 16 more D/MediaPlayer: currentOpPackageName=com.example.video_compressor I/System.out: Source path: content://com.miui.gallery.open/raw/%2Fstorage%2Femulated%2F0%2Fdownload%2FClass%2012%20Maths%20-%20Continuity%20and%20Differentiation%20-%20Reuploaded%20(first%20video%20freezed%20on%20YouTube).mp4 can be invalid! or you don't have READ_EXTERNAL_STORAGE permission I/Toast: Show toast from OpPackageName:com.example.video_compressor, PackageName:com.example.video_compressor D/MediaPlayerNative: getMetadata V/MediaPlayer: resetDrmState: mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false cleanDrmObj: mDrmObj=null mDrmSessionId=null V/MediaPlayer: resetDrmState: mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false cleanDrmObj: mDrmObj=null mDrmSessionId=null W/System: A resource failed to call close. W/System: A resource failed to call close.

mishra0007 commented 3 years ago

This is my code

`VideoCompressor.start(String.valueOf(contentURI), "/storage/emulated/0/download", new CompressionListener() { @Override public void onStart() { videoView.start(); progressBar.setMax(100); }

                @Override
                public void onSuccess() {
                    videoView.stopPlayback();
                    Toast.makeText(MainActivity.this, "Your Video Compressed Successfully", Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onFailure(String s) {
                    videoView.pause();
                    Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
                    System.out.println(s);
                }

                @Override
                public void onProgress(float v) {
                    progressBar.setProgress((int) v);
                }

                @Override
                public void onCancelled() {
                    videoView.pause();
                }
            });`
AbedElazizShe commented 3 years ago

Please have a look at the sample app. And use the latest version of the library.

bharatbl94 commented 2 years ago

First, check whether you have implemented scoped storage logic in-app. You can also use android:requestLegacyExternalStorage="true" But this legacyStoragePermission is limited to version 10. You need to implement scoped logic.

Also, check whether your targetSDKVersion value is 30 or greater or not, this is needed if you are using the app in Device android version 30 or more.