我有一个apk(App1)有一个原始资源(res / raw / mytextfile.txt),我想从另一个apk(App2)读取该文本文件。我在App1中定义了一个内容提供程序,我重写了openFile(Uri, String)
方法,如下所示:
Resources res = getContext().getResources();
return res.openRawResourceFd(R.raw.mytextfile).getParcelFileDescriptor();
App2执行以下操作以尝试访问mytextfile.txt:
ContentResolver cr = getApplicationContext().getContentResolver();
ParcelFileDescriptor fd = cr.openFileDescriptor(uri, "r");
InputStream is = new FileInputStream(fd.getFileDescriptor());
BufferedReader bis = new BufferedReader(new InputStreamReader(is));
但是,当我读取和写出BufferedReader的内容时,我得到的不仅仅是mytextfile.txt的内容。显然我做错了所以如果有人能指出我正确的方向,我会很感激。 谢谢,
米尔扎
我玩了这个,发现文件desriptor返回App2指向App1 apk文件。我将BufferedReader的内容写到文件中并对App1.apk进行了二进制比较。这两个文件完全相同。
答案 0 :(得分:3)
我有一个APK,可以从我的另一个APK中读取抽奖。
为此,我在两个项目的清单文件中设置了以下字段:
android:sharedUserId="com.myapp.shareduserid"
android:process="com.myapp.process"
用您自己的值替换com.myapp.shareduserid和com.myapp.process。这将允许APK同时访问彼此的数据。
完成后,您可以使用与我在此处提供的示例类似的内容。最有可能你可以用raw做同样的事情。这里的示例使用drawables:
mApk1Context = createPackageContext("com.apk1.app",Context.CONTEXT_IGNORE_SECURITY);
mApk1Resources = mApk1Context.getResources();
mDrawableResID = mApk1Resources.getIdentifier("mypng", "drawable","com.apk1.app");
Drawable myDrawable = mAndromedaAddonResources.getDrawable( mDrawableResID );
if( myDrawable != null )
((ImageView) findViewById(R.id.mywindow)).setBackgroundDrawable(myDrawable );
用您自己的包名替换com.apk1.app。
答案 1 :(得分:-1)
由于Android图书馆项目无法拥有原始资产,因此无法做到这一点。