2017-08-31 4 views
0

Alarmという2つのアクティビティがあります。Genymotion 2.8Genymotion 2.9の両方で問題なく動作します。
私は、MediaPlayerボタンを押すと、2.8でうまく動作しますが、2.9でクラッシュします。Media Playerがあります。
Error screen:私は、2.9のボタンを押した後
Alarm activityボタンを押すとアプリケーションがクラッシュし、Genymotionの2.9バージョンが動作しますが、2.8で動作します。

これは私が取得画面です:
これは私のアラームアクティビティの画面です。

私は携帯電話のボタンを押した後、これはlogcatです:

09-01 16:12:06.451 31541から31541 E/AndroidRuntime com.never.mediaalarmplayer /:致命的な例外:メイン プロセス:COM .never.mediaalarmplayer、PID:31541 java.lang.RuntimeException:アクティビティを開始できませんComponentInfo {com.never.mediaalarmplayer/com.never.mediaalarmplayer.MediaPlayer}:java.lang.SecurityException:許可の否認:com.androidを読み込み中です。 providers.media.MediaProvider uri content:// media/external/audio/media from pid = 31541、uid = 10174にはandroid.permission.READ_EXTERNAL_STORAGEが必要です。またはgrantUriPermission() android.app.ActivityThr ead.performLaunchActivity android.app.ActivityThread $ Hでandroid.app.ActivityThread.-wrap12(ActivityThread.java) でandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789)で(ActivityThread.java:2724) .handleMessage(ActivityThread.java:1527) (andler.os.Handler.dispatchMessage(Handler.java:110) at android.os.Looper.loop(Looper.java:203) android.app.ActivityThread.main (ActivityThread.java:6251) at java.lang.reflect.Method.invoke(ネイティブメソッド) com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1063) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924) 原因:java.lang.SecurityException:許可の否認:com.android.providers.media.MediaProviderの読み込みuri content:// media/external /オーディオ/メディアのpid = 31541、uid = 10174にandroid.permissionが必要です.READ_EXTERNAL_STORAGE、またはgrantUriPermission() android.os.Parcel.readException(Parcel.java:1683) android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils .java:188)android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)android.content.ContentResolver.queryでandroid.content.ContentProviderProxy.query(ContentProviderNative.java:421) で で(ContentResolver.java :537)(MediaPlayer.java:138) at com.never.mediaalarmplayer.MediaPlayer.onCreate(MediaPlayer.java:MediaPlayer.java: 41)android.app.ActivityThread.performLaunchActivityでandroid.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) でandroid.app.Activity.performCreate(Activity.java:6666) で(ActivityThread.java:2677) android.app.ActivityThread.-wrap12(ActivityThread.java)の とandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789) android.appの3210ActivityThread $ H.handleMessage(ActivityThread.java:1527) とandroid.os.Handler.dispatchMessage(Handler.java:110) at android.os.Looper.loop(Looper.java:203) android.appにあります。 ActivityThread.main(ActivityThread.java:6251) at java.lang.reflect.Method.invoke(ネイティブメソッド) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1063) at com .android.internal.os.ZygoteInit.main(ZygoteInit.java:924)

すでにマニフェストに挿入されているアクセス許可を要求するコマンドがありましたが、それ以上のものが必要かもしれません:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.never.mediaalarmplayer"> 
android:versionCode = "1" 
    android:versionName="1.0"> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

    <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" 
     android:fullBackupContent="@xml/backup_descriptor"> 
     <activity android:name=".Alarm" 
      android:launchMode="singleTop" 
      android:screenOrientation="portrait" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".MediaPlayer" 
      android:launchMode="singleTop" 
      android:screenOrientation="portrait" 
      android:label="@string/app_name" 
      /> 

     <service android:name="com.never.mediaalarmplayer.MusicService" /> 
     <receiver android:name=".AlarmReceiver"/> 
    </application> 

</manifest> 

Logcat 2.9:

09-02 06:34:47.269 666-677/system_process I/ActivityManager: START u0 {cmp=com.never.mediaalarmplayer/.MediaPlayer} from uid 10060 on display 0 
09-02 06:34:47.269 666-723/system_process W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client; transfer 4, track 48000 Hz, output 44100 Hz 
09-02 06:34:47.313 1148-1167/android.process.media E/DatabaseUtils: Writing exception to parcel 
                    java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=2012, uid=10060 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() 
                     at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:605) 
                     at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:480) 
                     at android.content.ContentProvider$Transport.query(ContentProvider.java:211) 
                     at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112) 
                     at android.os.Binder.execTransact(Binder.java:507) 
09-02 06:34:47.313 2012-2012/com.never.mediaalarmplayer D/AndroidRuntime: Shutting down VM 
09-02 06:34:47.318 2012-2012/com.never.mediaalarmplayer E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.never.mediaalarmplayer, PID: 2012 
                      java.lang.RuntimeException: Unable to start activity ComponentInfo{com.never.mediaalarmplayer/com.never.mediaalarmplayer.MediaPlayer}: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=2012, uid=10060 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                       at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:148) 
                       at android.app.ActivityThread.main(ActivityThread.java:5417) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                      Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=2012, uid=10060 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() 
                       at android.os.Parcel.readException(Parcel.java:1599) 
                       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:491) 
                       at android.content.ContentResolver.query(ContentResolver.java:434) 
                       at com.never.mediaalarmplayer.MediaPlayer.getSongList(MediaPlayer.java:138) 
                       at com.never.mediaalarmplayer.MediaPlayer.onCreate(MediaPlayer.java:41) 
                       at android.app.Activity.performCreate(Activity.java:6237) 
                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
                       at android.app.ActivityThread.-wrap11(ActivityThread.java)  
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
                       at android.os.Handler.dispatchMessage(Handler.java:102)  
                       at android.os.Looper.loop(Looper.java:148)  
                       at android.app.ActivityThread.main(ActivityThread.java:5417)  
                       at java.lang.reflect.Method.invoke(Native Method)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

それはどちらか自分の携帯電話では動作しません - 私は、Android 7.0とNokiaの3を持っています。
回答ありがとうございます!

+0

'adb logcat'の出力を追加できますか? –

+0

私は新しいですので、私は、デバッグモード中にMediaplayerボタンを押して、その後にadb logcatを入手しなければならないかと尋ねるつもりですか?もし私が初心者であることを説明していないなら...ありがとう! – Never

+0

はい、そうですが、携帯電話からのlogcatに基づいて、代わりにAndroidのバージョンのように見えます。 Genymotion 2.8と2.9で同じAndroidバージョンを使用していましたか? –

答えて

0

READ_EXTERNAL_STORAGEはAndroid 6.0以降のランタイム許可です。 マニフェストでパーミッション要求を追加するだけでは不十分です。アプリケーションは実行時にアクセス許可を要求する必要があります。それをしたくない場合は、22以下に変更してください。

Genymotionの実装にクラッシュの理由があります。 IMHO(私の推測)、Genymotion 2.8のMediaProviderは外部ストレージにアクセスしませんが、2.9は外部ストレージにアクセスします。

+0

助けてくれてありがとう、私はしばらく病院にいたので遅れてしまいました。私はそれを仕事のおかげで作った! – Never

0

logcatのこの部分によると:

EXCEPTION: main Process: com.never.mediaalarmplayer, PID: 31541 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.never.mediaalarmplayer/com.never.mediaalarmplayer.MediaPlayer}: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=31541, uid=10174 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()

アプリケーションが外部ストレージにアクセスしようとしているので、あなたのAndroidマニフェストファイルに一致する権限を追加する必要があります。詳細はhttps://developer.android.com/guide/topics/data/data-storage.html#filesExternalをご覧ください。

+0

私はすでに許可要求を持っていました。私は自分のマニフェストを投稿に追加しました。答えてくれてありがとう :)。 – Never

+0

ありがとうございます。私はあなたが試したことを知ってくれてありがとう、本当に私はいくつかのことを理解するのを助けました。 – Never

関連する問題