во время запуска приложения внезапно приложение остановилось, и во время отладки приложения появилась следующая ошибка

#java #android #android-studio-2.2 #android-music-player

#java #Android #android-studio-2.2 #android-музыкальный проигрыватель

Вопрос:

Я останавливаю приложение во время запуска приложения, и во время отладки приложения появилась следующая ошибка. Ниже приведены журналы logcat :

 E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.srishti.myapplication, PID: 13312
              java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.srishti.myapplication/com.example.srishti.myapplication.MainActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=13312, uid=10146 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2423)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2483)
                  at android.app.ActivityThread.access$900(ActivityThread.java:153)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:148)
                  at android.app.ActivityThread.main(ActivityThread.java:5438)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
               Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=13312, uid=10146 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
                  at android.os.Parcel.readException(Parcel.java:1620)
                  at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
                  at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
                  at android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
                  at android.content.ContentResolver.query(ContentResolver.java:493)
                  at android.content.ContentResolver.query(ContentResolver.java:435)
                  at com.example.srishti.myapplication.MainActivity.getSongList(MainActivity.java:142)
                  at com.example.srishti.myapplication.MainActivity.onCreate(MainActivity.java:58)
                  at android.app.Activity.performCreate(Activity.java:6303)
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2376)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2483) 
                  at android.app.ActivityThread.access$900(ActivityThread.java:153) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:148) 
                  at android.app.ActivityThread.main(ActivityThread.java:5438) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) 
I/Process: Sending signal. PID: 13312 SIG: 9
Disconnected from the target VM, address: 'localhost:8601', transport: 'socket'
  

Ответ №1:

требуется разрешение READ_EXTERNAL_STORAGE

Ответ №2:

Добавьте разрешение в свой манифест

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  

Если вы используете API 23 , добавьте следующий код в свою активность,

 if (Build.VERSION.SDK_INT >= 23) {
            if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
    }
}
  

Он вернет результат в,

 @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Log.v("", "Permission: "   permissions[0]   "was "   grantResults[0]);
        }

    }
  

Ответ №3:

Смотрите, в вашем журнале исключений есть решение

 requires android.permission.READ_EXTERNAL_STORAGE, or there is no runtime-permission model implementation if you are using API 23 or above
  

вы обращаетесь к хранилищу, но в манифесте не указано разрешение на использование.

Нравится

 <manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="..." >

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

// or if you wants to write to then add only below 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  

Но, скорее всего, это тот случай, когда вы используете API 23 (marshmallow или выше), поэтому добавьте runtime-permission модель для API 23 или более поздней версии, следуя официальным документам для реализации