I try the tutorial from Youtube to make Text Recognition from Camera, but somehow the app force close
Logcat
2021-01-14 17:10:49.411 26731-26731/? E/le.masunprojec: Unknown bits set in runtime_flags: 0x28000 <br/>
2021-01-14 17:10:49.497 26731-26760/com.example.masunproject E/Perf: Fail to get file list com.example.masunproject <br/>
2021-01-14 17:10:49.498 26731-26760/com.example.masunproject E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array <br/>
2021-01-14 17:10:49.498 26731-26760/com.example.masunproject E/Perf: Fail to get file list com.example.masunproject <br/>
2021-01-14 17:10:49.498 26731-26760/com.example.masunproject E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array <br/>
2021-01-14 17:10:49.498 26731-26760/com.example.masunproject E/Perf: Fail to get file list oat <br/>
2021-01-14 17:10:49.498 26731-26760/com.example.masunproject E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array <br/>
2021-01-14 17:10:57.315 26731-26731/com.example.masunproject E/AndroidRuntime: FATAL EXCEPTION: main <br/>
    Process: com.example.masunproject, PID: 26731 <br/>
    java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=android/com.android.internal.app.ResolverActivity clip={text/uri-list U:content://media/external/images/media/476840} (has extras) } from ProcessRecord{2689c68 26731:com.example.masunproject/u0a421} (pid=26731, uid=10421) with revoked permission android.permission.CAMERA <br/>
        at android.os.Parcel.createException(Parcel.java:2087)<br/>
        at android.os.Parcel.readException(Parcel.java:2055)<br/>
        at android.os.Parcel.readException(Parcel.java:2003)<br/>
        at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:3872)<br/>
        at android.app.Instrumentation.execStartActivity(Instrumentation.java:1714)<br/>
        at android.app.Activity.startActivityForResult(Activity.java:5319)<br/>
        at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:676)<br/>
        at android.app.Activity.startActivityForResult(Activity.java:5263)<br/>
        at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:663)<br/>
        at com.example.masunproject.MainActivity.add(MainActivity.java:74)<br/>
        at com.example.masunproject.MainActivity.access$000(MainActivity.java:25)<br/>
        at com.example.masunproject.MainActivity$3.onClick(MainActivity.java:61)<br/>
        at android.view.View.performClick(View.java:7256)<br/>
        at android.view.View.performClickInternal(View.java:7218)<br/>
        at android.view.View.access$3800(View.java:824)<br/>
        at android.view.View$PerformClick.run(View.java:27719)<br/>
        at android.os.Handler.handleCallback(Handler.java:883)<br/>
        at android.os.Handler.dispatchMessage(Handler.java:100)<br/>
        at android.os.Looper.loop(Looper.java:228)<br/>
        at android.app.ActivityThread.main(ActivityThread.java:7782)<br/>
        at java.lang.reflect.Method.invoke(Native Method)<br/>
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)<br/>
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:981)<br/>
     Caused by: android.os.RemoteException: Remote stack trace: <br/>
        at com.android.server.wm.ActivityStackSupervisor.checkStartAnyActivityPermission(ActivityStackSupervisor.java:1155)<br/>
        at com.android.server.wm.ActivityStarter.startActivity(ActivityStarter.java:979)<br/>
        at com.android.server.wm.ActivityStarter.startActivity(ActivityStarter.java:636)<br/>
        at com.android.server.wm.ActivityStarter.startActivityMayWait(ActivityStarter.java:1803)<br/>
        at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:567)<br/>
MainActivity
public class MainActivity extends AppCompatActivity {<br/>
    ImageView imageView,speak,capture;<br/>
    EditText editText;<br/>
    String s;<br/>
    TextToSpeech textToSpeech;<br/>
    Uri uri;<br/>
    private static final int IMAGE_PICK_CAMERA_CODE=1001;<br/>
    @Override<br/>
    protected void onCreate(Bundle savedInstanceState) {<br/>
        super.onCreate(savedInstanceState);<br/>
        setContentView(R.layout.activity_main);<br/>
        editText = findViewById(R.id.editView);<br/>
        textToSpeech=new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int i) {
            }
        });
        speak=findViewById(R.id.speak);
        capture=findViewById(R.id.capture);
        imageView=findViewById(R.id.imageView);
        speak.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                textToSpeech.speak(s,TextToSpeech.QUEUE_FLUSH,null);
            }
        });
        capture.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                add();
            }
        });
    }
    private void add() {
        ContentValues values=new ContentValues();
        values.put(MediaStore.Images.Media.TITLE, "Picture");
        values.put(MediaStore.Images.Media.DESCRIPTION, "Camera to speak");
        uri=getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
        Intent c=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        c.putExtra(MediaStore.EXTRA_OUTPUT,uri);
        startActivityForResult(c, IMAGE_PICK_CAMERA_CODE);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        capture.setVisibility(View.GONE);
        speak.setVisibility(View.VISIBLE);
        if(requestCode==IMAGE_PICK_CAMERA_CODE){
            CropImage.activity(uri)
                    .setGuidelines(CropImageView.Guidelines.ON)
                    .start(this);
        }
        CropImage.ActivityResult result= CropImage.getActivityResult(data);
        Uri uri=result.getUri();
        imageView.setImageURI(uri);
        BitmapDrawable bitmapDrawable=(BitmapDrawable) imageView.getDrawable();
        Bitmap bitmap=bitmapDrawable.getBitmap();
        TextRecognizer recognizer=new TextRecognizer.Builder(getApplicationContext()).build();
        Frame frame=new Frame.Builder().setBitmap(bitmap).build();
        SparseArray<TextBlock> item=recognizer.detect(frame);
        StringBuilder stringBuilder=new StringBuilder();
        for(int i=0;i<item.size();i++){
            TextBlock myitem=item.valueAt(i);
            stringBuilder.append(myitem.getValue());
            stringBuilder.append("\n");
        }
        editText.setText(stringBuilder.toString());
        s=stringBuilder.toString();
        super.onActivityResult(requestCode, resultCode, data);
    }
}
Manifest
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.masunproject">
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.theartofdev.edmodo.cropper.CropImageActivity"
            android:theme="@style/AppTheme"/>
    </application>
</manifest>
 
     
    