欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂Android培訓(xùn)之獲取其他應(yīng)用中的assets資源

2019-01-15 15:02:50 1769瀏覽

今天扣丁學(xué)堂Android培訓(xùn)老師給大家介紹一下關(guān)于Android獲取其他應(yīng)用中的assets資源詳解,首先有這樣一個需求:A應(yīng)用在一定條件下出發(fā)某個邏輯后,需要從B應(yīng)用中獲取一些資源(assets下的mp4視頻、還有drawable下的一些圖片用作背景),具體需求就不說啦哈哈,用一張圖來表示應(yīng)該更明白:



A和B應(yīng)用其實(shí)是1對多的關(guān)系,不同的B應(yīng)用需要從他們自己的地方獲取到資源給A。

一般我們獲取app內(nèi)的資源肯定是要獲取到Resource這個類,而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。第二個參數(shù)是一個配置標(biāo)記。

public static final int CONTEXT_INCLUDE_CODE = 0x00000001;
public static final int CONTEXT_IGNORE_SECURITY = 0x00000002;

第一個標(biāo)記是讓我們可以通過類加載器去構(gòu)建相關(guān)類,但是需要第二個參數(shù)的配合:忽略安全限制。一般Flag就配置這樣個類型。

在創(chuàng)建出Context之后,就可以通過獲取Resource類去獲取對應(yīng)的資源了。

//栗子:獲取一個drawable 的id
      int identifier = bContext.getResources().getIdentifier("bg", "drawable", bContext.getPackageName());

但是assets中的資源就沒有這么方便了。雖然通過context可以獲取到對應(yīng)的assetsManager,但是在操作assetsManager獲取資源的時候就出現(xiàn)問題了:在assets中獲取資源一般都是通過文件或者流的方式,但是我在操作的時候直接拋出異常,說找不到我的資源名字。我這里檢查了好幾遍了,就是獲取不到。。。

那么這種情況下我想能不能通過反射去拿到我想需要的資源呢?

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;
  }
}

這是B應(yīng)用,我在B應(yīng)用中實(shí)現(xiàn)了一個方法,去獲取A中所需要的資源,然后通過反射調(diào)用這個方法,這種方式就可以拿到我想要的資源了,而且這種方法目前發(fā)現(xiàn)是萬能方法哈哈。

具體的例子和實(shí)現(xiàn)就不拷貝了,其實(shí)思路很簡單,就是兩步:構(gòu)建Context和反射調(diào)用。

以上就是關(guān)于扣丁學(xué)堂Android培訓(xùn)之獲取其他應(yīng)用中的assets資源的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,想要了解更多關(guān)于Android開發(fā)方面內(nèi)容的小伙伴,請關(guān)注扣丁學(xué)堂官網(wǎng)、微信等平臺,扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育平臺為您提供權(quán)威的Android開發(fā)環(huán)境搭建視頻,扣丁學(xué)堂老師精心推出的Android視頻教程定能讓你快速掌握Android從入門到精通開發(fā)實(shí)戰(zhàn)技能。


扣丁學(xué)堂微信公眾號


【關(guān)注微信公眾號獲取更多學(xué)習(xí)資料】


查看更多關(guān)于“Android開發(fā)技術(shù)的相關(guān)資訊>>

標(biāo)簽: Android培訓(xùn) Android學(xué)習(xí)路線 Android視頻教程 Android開發(fā)培訓(xùn) Android培訓(xùn)班

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部