Adobe Reader赢得';无法从Android上的Intent和content:///打开一些有效的PDF

Adobe Reader赢得';无法从Android上的Intent和content:///打开一些有效的PDF,android,pdf,android-intent,uri,android-fileprovider,Android,Pdf,Android Intent,Uri,Android Fileprovider,我正在尝试为位于/Android/data/package.name/files/中的一些文件实现一种打开PDF阅读器的方法。我无法使用合适的文件提供程序,但我发现刚刚添加的content://起到了作用。但出于某种原因,它无法打开其中的一些,我不明白为什么 File file=new File("Direct path to file as string"); if(file.exists()){ ///Yes, File Exists try {

我正在尝试为位于/Android/data/package.name/files/中的一些文件实现一种打开PDF阅读器的方法。我无法使用合适的文件提供程序,但我发现刚刚添加的content://起到了作用。但出于某种原因,它无法打开其中的一些,我不明白为什么

File file=new File("Direct path to file as string");

if(file.exists()){  ///Yes, File Exists
            try {

                Intent intent = new Intent(Intent.ACTION_VIEW);
                Log.v("Authority", context.getApplicationContext().getPackageName());
                Log.v("URI", Util.UriForFile(context, file).toString());
                intent.setDataAndType(Util.UriForFile(context, file), "application/pdf");
                intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                context.startActivity(intent);


            } catch (ActivityNotFoundException e) {
                parent.alert(context.getString(R.string.error_nopdfreader));
            }
}
以及实际的方法Util.UriForFile:

public static Uri UriForFile(Context context, File file){
    return Uri.parse("content://"+file.getAbsolutePath());
//        if(context==null)
//            Log.v("Util", "Context is null");
//
//        if(file==null)
//            Log.v("Util", "File is null");
//
//        if(context.getApplicationInfo()==null)
//            Log.v("Util", "getApplicationInfo is null");
//
 //        return FileProvider.getUriForFile(context,  context.getApplicationInfo().packageName+".provider", file);
}
好的,我“神奇地”解决了这个问题,返回到FileProvider的使用(取消行注释),并做了2个修改:

  • 在意图的标志中添加标志\u授予\u读取\u URI\u权限
  • 添加“非文档化”文件路径(用于访问Android/data之外的文件):

    
    
  • 好的,我“神奇地”解决了这个问题,返回到FileProvider的使用(取消行注释),并做了2个修改:

  • 在意图的标志中添加标志\u授予\u读取\u URI\u权限
  • 添加“非文档化”文件路径(用于访问Android/data之外的文件):

    
    

  • “我发现刚刚添加的内容://完成了任务”——这将适用于大约零个应用程序。如果它与AdobeReader一起工作,那就是AdobeReader中的一个bug。这是无效的
    Uri
    (例如,它没有权限字符串)。“我在使用一个适当的文件提供者时失败了”——考虑问一个单独的堆栈溢出问题,在这里你提供了一个详细解释“失败”的意思。嗯,我在这里描述了FileProvider的一半问题:除此之外,我还想让用户在Android/data文件夹之外,甚至在辅助存储上指定另一个目录,但使用内容:///是唯一有效的方法,即使在内部存储上使用FileProvider,Adobe也不会打开某些特定的文件。看起来不可处罚的文件是那些实际文件名中包含“%20”的文件(没有空格,但文件提供程序将实际的“%20”字符编码为“%2520”)“我发现刚才添加的内容://完成了任务”-这将适用于大约零个应用程序。如果它与AdobeReader一起工作,那就是AdobeReader中的一个bug。这是无效的
    Uri
    (例如,它没有权限字符串)。“我在使用一个适当的文件提供者时失败了”——考虑问一个单独的堆栈溢出问题,在这里你提供了一个详细解释“失败”的意思。嗯,我在这里描述了FileProvider的一半问题:除此之外,我还想让用户在Android/data文件夹之外,甚至在辅助存储上指定另一个目录,但使用内容:///是唯一有效的方法,即使在内部存储上使用FileProvider,Adobe也不会打开某些特定的文件。看起来不可修复的文件是那些实际文件名中包含“%20”的文件(没有空格,但实际的“%20”字符被文件提供程序编码为“%2520”)。我也有类似的问题。除Adobe Reader外,所有PDF应用程序都可以通过Intent打开该文件。但我的问题是文件名。最后它没有.pdf文件。不知道为什么这不是其他应用程序的问题。我也有类似的问题。除Adobe Reader外,所有PDF应用程序都可以通过Intent打开该文件。但我的问题是文件名。最后它没有.pdf文件。不知道为什么这不是其他应用程序的问题。
      <root-path path="/storage/" name="root_test" />