title: Android Studio - App crashes on device but not on Emulator - Probably Missing Permission
body: <p>Im currently working on an App that reads multiple folders and displays them in 3 Tabs with a listview. The app works without a problem on the Emulated Device but crashes on my normal Device.</p>
  <p>This is the output I get when I launch the app on my device.</p>
  <pre><code>09/02 12:05:03: Launching 'app' on Xiaomi MI 9 Transparent Edition.
  $ adb shell am start -n &quot;com.example.stundenzettel2/com.example.stundenzettel2.MainActivity&quot; -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
  Connected to process 9449 on device 'xiaomi-mi_9_transparent_edition-331b53a7'.
  Capturing and displaying logcat messages from application. This behavior can be disabled in the &quot;Logcat output&quot; section of the &quot;Debugger&quot; settings page.
  W/System.err: org.xml.sax.SAXParseException: name expected (position:START_TAG &lt;dimen name='config_icon_width'&gt;@7:32 in java.io.InputStreamReader@f9d92f) 
          at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:147)
          at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:107)
          at miui.content.res.ThemeValues.parseThemeValues(ThemeValues.java:123)
          at miui.content.res.ThemeResources$LoadThemeConfigHelper.load(ThemeResources.java:443)
          at miui.content.res.ThemeZipFile.loadThemeConfigInner(ThemeZipFile.java:272)
          at miui.content.res.ThemeZipFile.loadThemeConfig(ThemeZipFile.java:254)
          at miui.content.res.ThemeResources$LoadThemeConfigHelper.newTarget(ThemeResources.java:436)
          at miui.content.res.ThemeResources.loadThemeValues(ThemeResources.java:455)
  W/System.err:     at miui.content.res.ThemeResources.checkUpdate(ThemeResources.java:225)
          at miui.content.res.ThemeResourcesSystem.checkUpdate(ThemeResourcesSystem.java:76)
          at miui.content.res.ThemeResources.getSystem(ThemeResources.java:123)
          at android.content.res.MiuiResourcesImpl.updateConfiguration(MiuiResourcesImpl.java:248)
          at android.content.res.Resources.updateConfiguration(Resources.java:1970)
          at android.content.res.Resources.updateSystemConfiguration(Resources.java:1983)
          at android.app.ResourcesManager.applyConfigurationToResourcesLocked(ResourcesManager.java:1048)
          at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6270)
          at android.app.ActivityThread.access$1400(ActivityThread.java:220)
          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1883)
          at android.os.Handler.dispatchMessage(Handler.java:107)
          at android.os.Looper.loop(Looper.java:224)
          at android.app.ActivityThread.main(ActivityThread.java:7520)
  W/System.err:     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)
  I/Perf: Connecting to perf service.
  I/FeatureParser: can't find cepheus.xml in assets/device_features/,it may be in /system/etc/device_features
  W/.stundenzettel2: type=1400 audit(0.0:115384): avc: denied { read } for name=&quot;u:object_r:vendor_displayfeature_prop:s0&quot; dev=&quot;tmpfs&quot; ino=28839 scontext=u:r:untrusted_app:s0:c175,c257,c512,c768 tcontext=u:object_r:vendor_displayfeature_prop:s0 tclass=file permissive=0
  E/libc: Access denied finding property &quot;ro.vendor.df.effect.conflict&quot;
  E/Perf: Fail to get file list com.example.stundenzettel2
      getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
  E/Perf: Fail to get file list com.example.stundenzettel2
      getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
  W/.stundenzettel: Accessing hidden method Landroid/view/View;-&gt;computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed)
  W/.stundenzettel: Accessing hidden method Landroid/view/ViewGroup;-&gt;makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
  I/System.out: /storage/emulated/0
  W/System.err: java.io.IOException: Permission denied
          at java.io.UnixFileSystem.createFileExclusively0(Native Method)
          at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
          at java.io.File.createNewFile(File.java:1008)
          at com.example.stundenzettel2.tab1.&lt;init&gt;(tab1.java:165)
          at com.example.stundenzettel2.PageAdapter.getItem(PageAdapter.java:25)
          at androidx.fragment.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:170)
  W/System.err:     at androidx.viewpager.widget.ViewPager.addNewItem(ViewPager.java:1010)
          at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1158)
          at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
          at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
          at android.view.View.measure(View.java:24603)
          at androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227)
          at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1572)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
          at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:146)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
          at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
          at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
          at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
          at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
          at com.android.internal.policy.DecorView.onMeasure(DecorView.java:766)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3072)
          at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1896)
          at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2188)
          at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1784)
          at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7787)
          at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1031)
          at android.view.Choreographer.doCallbacks(Choreographer.java:854)
          at android.view.Choreographer.doFrame(Choreographer.java:789)
          at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1016)
          at android.os.Handler.handleCallback(Handler.java:883)
          at android.os.Handler.dispatchMessage(Handler.java:100)
          at android.os.Looper.loop(Looper.java:224)
          at android.app.ActivityThread.main(ActivityThread.java:7520)
          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)
  W/System.err: java.io.IOException: Permission denied
          at java.io.UnixFileSystem.createFileExclusively0(Native Method)
          at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
          at java.io.File.createNewFile(File.java:1008)
          at com.example.stundenzettel2.tab2.&lt;init&gt;(tab2.java:44)
          at com.example.stundenzettel2.PageAdapter.getItem(PageAdapter.java:31)
          at androidx.fragment.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:170)
          at androidx.viewpager.widget.ViewPager.addNewItem(ViewPager.java:1010)
          at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1158)
          at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
          at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
          at android.view.View.measure(View.java:24603)
          at androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227)
          at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1572)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
          at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:146)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
          at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
          at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
          at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
          at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
          at com.android.internal.policy.DecorView.onMeasure(DecorView.java:766)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3072)
          at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1896)
          at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2188)
          at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1784)
          at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7787)
  W/System.err:     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1031)
          at android.view.Choreographer.doCallbacks(Choreographer.java:854)
          at android.view.Choreographer.doFrame(Choreographer.java:789)
          at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1016)
          at android.os.Handler.handleCallback(Handler.java:883)
          at android.os.Handler.dispatchMessage(Handler.java:100)
          at android.os.Looper.loop(Looper.java:224)
          at android.app.ActivityThread.main(ActivityThread.java:7520)
          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)
  W/System.err: java.io.IOException: Permission denied
          at java.io.UnixFileSystem.createFileExclusively0(Native Method)
          at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
          at java.io.File.createNewFile(File.java:1008)
          at com.example.stundenzettel2.tab3.&lt;init&gt;(tab3.java:44)
          at com.example.stundenzettel2.PageAdapter.getItem(PageAdapter.java:37)
          at androidx.fragment.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:170)
          at androidx.viewpager.widget.ViewPager.addNewItem(ViewPager.java:1010)
          at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1158)
          at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
          at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
          at android.view.View.measure(View.java:24603)
          at androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227)
          at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1572)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
          at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:146)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
          at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
          at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
  W/System.err:     at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
          at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
          at com.android.internal.policy.DecorView.onMeasure(DecorView.java:766)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3072)
          at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1896)
          at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2188)
          at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1784)
          at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7787)
          at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1031)
          at android.view.Choreographer.doCallbacks(Choreographer.java:854)
          at android.view.Choreographer.doFrame(Choreographer.java:789)
          at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1016)
          at android.os.Handler.handleCallback(Handler.java:883)
          at android.os.Handler.dispatchMessage(Handler.java:100)
          at android.os.Looper.loop(Looper.java:224)
          at android.app.ActivityThread.main(ActivityThread.java:7520)
          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)
  D/AndroidRuntime: Shutting down VM
  E/AndroidRuntime: FATAL EXCEPTION: main
      Process: com.example.stundenzettel2, PID: 9449
      java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
          at androidx.fragment.app.FragmentTransaction.doAddOp(FragmentTransaction.java:161)
          at androidx.fragment.app.BackStackRecord.doAddOp(BackStackRecord.java:179)
          at androidx.fragment.app.FragmentTransaction.add(FragmentTransaction.java:156)
          at androidx.fragment.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:172)
          at androidx.viewpager.widget.ViewPager.addNewItem(ViewPager.java:1010)
          at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1158)
          at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
          at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
          at android.view.View.measure(View.java:24603)
          at androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227)
          at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1572)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
          at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:146)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
          at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
          at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
          at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
          at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
          at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
          at com.android.internal.policy.DecorView.onMeasure(DecorView.java:766)
          at android.view.View.measure(View.java:24603)
          at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3072)
          at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1896)
          at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2188)
          at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1784)
          at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7787)
          at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1031)
          at android.view.Choreographer.doCallbacks(Choreographer.java:854)
          at android.view.Choreographer.doFrame(Choreographer.java:789)
          at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1016)
          at android.os.Handler.handleCallback(Handler.java:883)
          at android.os.Handler.dispatchMessage(Handler.java:100)
          at android.os.Looper.loop(Looper.java:224)
          at android.app.ActivityThread.main(ActivityThread.java:7520)
          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)
  </code></pre>
  <p>I think I`m getting a NullPointerException because the App cant read the files inside my device.
  This is propably the Problem. Im trying to get the files from the folder and create a file in the folder so that it cant be empty.</p>
  <pre><code>public tab1() throws IOException {
  
          final File path = Environment.getExternalStorageDirectory();
  
          System.out.println(path);
  
          File f = new File(path + &quot;/My Files/Angefangen&quot;);
  
          File b = new File(path + &quot;/My Files/Angefangen/bruh.txt&quot;);
          b.getParentFile().mkdirs();
          b.createNewFile();
  
          accepted = new ArrayList&lt;String&gt;(Arrays.asList(f.list()));
      }
  </code></pre>
  <p><a href="https://i.stack.imgur.com/pB5HZ.png" rel="nofollow noreferrer">Codeblock as Image</a></p>
  <p>My Manifest has the Permission Lines added and im asking for permission in my MainActivity i dont know if thats enough.</p>
  <pre><code>&lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&gt;
  &lt;uses-permission android:name=&quot;android.permission.READ_EXTERNAL_STORAGE&quot; /&gt;
  </code></pre>
  <pre><code>int PERMISSION_ALL = 1;
      String[] PERMISSIONS = {
              android.Manifest.permission.READ_EXTERNAL_STORAGE,
              android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
      };
  
  
      public static boolean hasPermissions(Context context, String... permissions) {
          if (context != null &amp;&amp; permissions != null) {
              for (String permission : permissions) {
                  if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                      return false;
                  }
              }
          }
          return true;
      }
  </code></pre>
  <p>and</p>
  <pre><code>if (!hasPermissions(this, PERMISSIONS)) {
              ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
          }
  </code></pre>
  <p>Thanks in advance for any help.</p>
  <p>EDIT: Fixed it by adding this to the Manifest for Devices above API 29.</p>
  <pre><code>&lt;manifest ... &gt; 
   
  &lt;application android:requestLegacyExternalStorage=&quot;true&quot; ... &gt;
      ...
  &lt;/application&gt;&lt;/manifest&gt;
  </code></pre>