无法通过我的应用程序内部存储从客户端应用程序打开音频文件

时间:2017-01-30 09:18:02

标签: android

清单文件:

    <provider android:name="android.support.v4.content.FileProvider"
        android:authorities="com.package.mygallary"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/paths" />
    </provider>

paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path name="files" path="files/" />

</paths>

活动类

public static final String AUTHORITY = "com.package.mygallary";

File imagePath = new File(getFilesDir(),"files");                                             
    File newFile = new 

File(imagePath,name1.substring(ind2+1,name1.length()));                                               
uri = FileProvider.getUriForFile(getApplicationContext(),AUTHORITY , newFile);                                        

// getApplicationContext()。grantUriPermission(AUTHORITY,URI,    // FLAG_GRANT_WRITE_URI_PERMISSION);

//getApplicationContext().grantUriPermission(AUTHORITY, uri,         //FLAG_GRANT_READ_URI_PERMISSION );  


Intent intent = new Intent();                             
intent.setAction(Intent.ACTION_VIEW);                             
ContentResolver contentResolver = getContentResolver();                             
MimeTypeMap mime = MimeTypeMap.getSingleton();                           
 String type = contentResolver.getType(uri);

if (type == null) {

 intent.setDataAndType(uri, "audio/*");

} else {

 intent.setDataAndType(uri, type);                             
}



 List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
                                for (ResolveInfo resolveInfo : resInfoList) {
                                    String packageName = resolveInfo.activityInfo.packageName;
                                    context.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
                                }

startActivityForResult(intent,Activity.RESULT_OK);

它给了toast mag:&#34;抱歉,无法打开文件&#34;

错误日志:

01-30 14:41:20.174 1584-1584/? E/MediaPlayer: setDataSource: SecurityException! uri=content://com.package.mygallary/files/JaSajanaTujhkoBhola(Raja).mp3
                                              java.lang.SecurityException: Permission Denial: opening provider android.support.v4.content.FileProvider from ProcessRecord{423725c0 1584:com.android.music/u0a68} (pid=1584, uid=10068) that is not exported from uid 10308
                                                  at android.os.Parcel.readException(Parcel.java:1465)
                                                  at android.os.Parcel.readException(Parcel.java:1419)
                                                  at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:2937)
                                                  at android.app.ActivityThread.acquireProvider(ActivityThread.java:4619)
                                                  at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2303)
                                                  at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1452)
                                                  at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1073)
                                                  at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:929)
                                                  at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:856)
                                                  at android.media.MediaPlayer.setDataSource(MediaPlayer.java:905)
                                                  at android.media.MediaPlayer.setDataSource(MediaPlayer.java:881)
                                                  at com.android.music.AudioPreview$PreviewPlayer.setDataSourceAndPrepare(AudioPreview.java:587)
                                                  at com.android.music.AudioPreview.onCreate(AudioPreview.java:170)
                                                  at android.app.Activity.performCreate(Activity.java:5273)
                                                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302)
                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
                                                  at android.app.ActivityThread.access$800(ActivityThread.java:151)
                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
                                                  at android.os.Handler.dispatchMessage(Handler.java:110)
                                                  at android.os.Looper.loop(Looper.java:193)
                                                  at android.app.ActivityThread.main(ActivityThread.java:5299)
                                                  at java.lang.reflect.Method.invokeNative(Native Method)
                                                  at java.lang.reflect.Method.invoke(Method.java:515)
                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)
                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641)
                                                  at dalvik.system.NativeStart.main(Native Method)
01-30 14:41:20.178 158-16410/? E/MediaPlayerService: Couldn't open fd for content://com.package.mygallary/files/JaSajanaTujhkoBhola(Raja).mp3
01-30 14:41:20.178 1584-1584/? E/MediaPlayer: Unable to create media player

帮我解决这个问题......

1 个答案:

答案 0 :(得分:1)

我想你忘了取得READ_EXTERNAL_STORAGE的许可