Bry*_*eld 7 android shared file
这两个应用程序具有相同的sharedUserId.当我在app1中使用此代码时
context.openFileOutput("/data/data/org.me.app2/files/shared-data.dat", MODE_PRIVATE)
Run Code Online (Sandbox Code Playgroud)
我得到一个异常,告诉我该文件包含一个路径分隔符.
我正在尝试将app1中的文件写入app2的存储空间.(我当然需要确保app2的文件目录首先存在)
理想情况下,我会写一个用户特定的目录而不是特定于应用程序的目录,但我不知道是否可以这样做
首先,永远不要使用完整的内部存储路径/data/data.让操作系统为您提供路径(例如,通过Context.getFilesDir()或Environment.getExternalStorageState()).不要假设数据在哪里.
其次 - 你已经这样做了!不像File,Context.openFileOutput已经预先考虑/data/data/[package]到您的路径,所以你并不需要指定.只需指定文件名即可.
如果您确实认为它是安全且必要的,并且如果两个应用程序在清单中使用android:sharedUserId共享相同的用户ID,则可以使用Context.createPackageContext()并使用CONTEXT_RESTRICTED 获取其他应用程序的上下文,然后仅使用文件名使用openFileOutput .
FileOutputStream相对于此路径打开所需文件的a :
String filePath = getPackageManager().
getPackageInfo("com.your2ndApp.package", 0).
applicationInfo.dataDir;
Run Code Online (Sandbox Code Playgroud)
由于这已经有几个月了,我认为你已经解决了你的问题,但无论如何我都会做出贡献.
在应用程序之间共享数据是ContentProviders的用途.假设您知道如何编写ContentProvider并访问它,您可以通过ParcelFileDescriptor访问文件,其中包括创建文件的模式的常量.
您现在需要的是限制访问权限,以便不是每个人都可以通过内容提供程序读取文件,并通过Android权限执行此操作.在您的应用程序的清单中,将托管文件和内容提供程序的应用程序,编写如下内容:
<permission android:name="com.example.android.provider.ACCESS" android:protectionLevel="signature"/>
Run Code Online (Sandbox Code Playgroud)
并在两个应用程序中添加:
<uses-permission android:name="com.example.android.provider.ACCESS" />
Run Code Online (Sandbox Code Playgroud)
通过使用protectionLevel ="signature",只有您签名的应用才能访问您的内容提供商,从而访问您的文件.
| 归档时间: |
|
| 查看次数: |
11813 次 |
| 最近记录: |