今天就跟大家聊聊有關(guān)Android怎么獲取其他應(yīng)用中的assets資源,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
成都創(chuàng)新互聯(lián)是一家專業(yè)提供鞏留企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為鞏留眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
一般我們獲取app內(nèi)的資源肯定是要獲取到Resource這個(gè)類,而Resource是通過Context類的getResource獲取到了,所以我們只需要獲取到B應(yīng)用的Context類就可以了。
可是其他App的Context怎么獲?。科鋵?shí)Context 自己就有構(gòu)建Context的方法:createPackageContext。
@Override public Context createPackageContext(String packageName, int flags) throws PackageManager.NameNotFoundException { return mBase.createPackageContext(packageName, flags); }
通過我們只需要傳入所需要App的包名,就可以構(gòu)造出對應(yīng)App的Context。第二個(gè)參數(shù)是一個(gè)配置標(biāo)記。
public static final int CONTEXT_INCLUDE_CODE = 0x00000001; public static final int CONTEXT_IGNORE_SECURITY = 0x00000002;
第一個(gè)標(biāo)記是讓我們可以通過類加載器去構(gòu)建相關(guān)類,但是需要第二個(gè)參數(shù)的配合:忽略安全限制。一般Flag就配置這樣個(gè)類型。
在創(chuàng)建出Context之后,就可以通過獲取Resource類去獲取對應(yīng)的資源了。
//栗子:獲取一個(gè)drawable 的id int identifier = bContext.getResources().getIdentifier("bg", "drawable", bContext.getPackageName());
但是assets中的資源就沒有這么方便了。雖然通過context可以獲取到對應(yīng)的assetsManager,但是在操作assetsManager獲取資源的時(shí)候就出現(xiàn)問題了:在assets中獲取資源一般都是通過文件或者流的方式,但是我在操作的時(shí)候直接拋出異常,說找不到我的資源名字。我這里檢查了好幾遍了,就是獲取不到。。。
那么這種情況下我想能不能通過反射去拿到我想需要的資源呢?
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e("GFZY", "onCreate: "); try { Context bContext = this.createPackageContext("pers.jibai.matrixtext" , Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY); ClassLoader loader = bContext.getClassLoader(); Class<?> clazz = loader.loadClass("pers.jibai.matrixtext.A"); Object a = clazz.getConstructor().newInstance(); Method getAssetBg = clazz.getMethod("getBgMp4", Context.class); Log.e("GFZY", "onCreate: " + getAssetBg.getName()); InputStream invoke = (InputStream) getAssetBg.invoke(a, bContext); BufferedReader reader = new BufferedReader(new InputStreamReader(invoke)); String s = reader.readLine(); reader.close(); ((TextView) findViewById(R.id.t)).setText(s); } catch (Exception e) { e.printStackTrace(); Log.e("GFZY", "onCreate: " + e.getMessage()); } }
這是我的A應(yīng)用
public class A { public void asd() { Log.e("GFZY", "asd:我是matrix "); } public InputStream getBgMp4(Context context) { try { return context.getAssets().open("asd"); } catch (IOException e) { e.printStackTrace(); } return null; } }
看完上述內(nèi)容,你們對Android怎么獲取其他應(yīng)用中的assets資源有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
名稱欄目:Android怎么獲取其他應(yīng)用中的assets資源
瀏覽路徑:http://sd-ha.com/article42/jgsjec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、全網(wǎng)營銷推廣、微信小程序、服務(wù)器托管、Google、營銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)