Adobe AIR+Android文件提供程序FILE_PROVIDER_PATHS FILE,应用程序存储目录

oogrdqng  于 2022-10-08  发布在  Android
关注(0)|答案(1)|浏览(170)

我正在尝试获取更新ANE(Adobe本地扩展),以便在Android上使用我的Adobe AIR应用程序,但看起来我无法为文件获取正确的FILE_PROVIDER_PATHS。

我将文件下载到Adobe Flex应用程序中的应用程序的File.ApplationStorageDirectory中。

Android清单中的My FileProvider如下所示:

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="air.MY_APP_ID_HERE.files"
    android:grantUriPermissions="true"
    android:exported="false">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/fileproviderpaths" />
</provider>

文件提供程序路径.xml:

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path name="files" path="." />
    <external-path name="files" path="." />
    <external-files-path name="files" path="." />
</paths>

然后在An(Java)代码中,我尝试访问如下文件:

newFile = new File(urlString); 

// newFile.getPath() debugs as "/data/user/0/air.MY_APP_ID_HERE/MY_APP_ID_HERE/LocalStore/myFileName.apk"
// the file really exists there - i see it on newFile.exists() and newFile.length()

// context.getActivity() just returns the Android Context - this is Adobe AIR specific
// context.getActivity().getPackageName() debugs as "air.MY_APP_ID_HERE"

Uri fileUri = FileProvider.getUriForFile(context.getActivity(), context.getActivity().getPackageName() + ".files", newFile);

无论我在文件中尝试什么,我总是得到一个异常

Failed to find configured root that contains /data/data/air.MYAPP_ID_HERE/MYAPP_ID_HERE/Local Store/myFileName.apk

现在我的主要问题是,为什么它被称为“/Data/User/0/air.MY_APP_ID_HERE...”在newFile.getPath()和“/data/data/air.MYAPP_ID_HERE...”在FileProvider异常中?

第二个问题是如何使用文件提供程序访问“/data/user/0/air.MY_APP_ID_HERE/MY_APP_ID_HERE/LocalStore/myFileName.apk”,或者如何在文件提供程序路径s.xml中为其设置路径

谢谢您抽时间见我!

rhfm7lfc

rhfm7lfc1#

哎呀,它花了很多试验和错误,但我终于弄明白了。不过,解决方案已经很接近了。

因此,当我们在Flex/AIR中创建如下文件时

_updateDirectory = File.applicationStorageDirectory;
_updateFile = _updateDirectory.resolvePath("myFileName.apk");

Android设备上的本地路径指向此位置(您可以在Flex中的_updateFile.nativePath下调试它)

/data/user/0/air.MY_APP_ID_HERE/MY_APP_ID_HERE/Local Store/myFileName.apk

在fileProviderpaths.xml中,您需要指定文件路径,其他两个不是必需的。但这件事

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path name="somenamehere" path="." />
</paths>

指向设备上的此目录:

/data/user/0/air.MY_APP_ID_HERE/files

因此,我们需要做的是将一个目录向上转到根目录,然后向下转到AIR应用程序StorageDirectory:

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path name="somenamehere" path="../MY_APP_ID_HERE/Local Store" />
</paths>

然后,您可以将该文件传递给Java An(在我的例子中,我已经在Flex中下载了该文件,并希望让An安装它):

AppInstaller.getInstance().installApp(_updateFile.nativePath);

Java和代码:

urlString = Uri.parse(args[0].getAsString()).toString(); 
newFile = new File(urlString);
Uri fileUri = FileProvider.getUriForFile(context.getActivity(), context.getActivity().getPackageName() + ".files", newFile);

这里的+“.files”部分指的是清单中的文件提供程序声明

android:authorities="air.MY_APP_ID_HERE.files"

所以这里的“.files”和那里的“.files”应该被称为相同的,并确保您添加了“air”。在您的实际应用程序ID之前,因为这是您的应用程序将被安装在设备上的方式-作为“air.YOU_APP_ID_HERE”

相关问题