最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android獲取其他應(yīng)用中的assets資源

 更新時(shí)間:2019年01月14日 11:59:07   作者:Zy_JiBai  
今天小編就為大家分享一篇關(guān)于Android獲取其他應(yīng)用中的assets資源,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

最近有這樣一個(gè)需求:A應(yīng)用在一定條件下出發(fā)某個(gè)邏輯后,需要從B應(yīng)用中獲取一些資源(assets下的mp4視頻、還有drawable下的一些圖片用作背景),具體需求就不說啦哈哈,用一張圖來表示應(yīng)該更明白:

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

一般我們獲取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;
  }
}

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

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • Android逆向之dex2oat的實(shí)現(xiàn)解析

    Android逆向之dex2oat的實(shí)現(xiàn)解析

    虛擬機(jī)的發(fā)生展經(jīng)歷了從初期的dalvik,到中期的dalvik,以及后期的ART。但是市面上的APK文件早已已經(jīng)全球流行。為了能夠讓這些APK不加改動(dòng)的在所有虛擬機(jī)上面運(yùn)行,google采用了類似適配器模式。即在讓虛擬運(yùn)行之前多一道工序。就是dexopt
    2021-10-10
  • Android中使用ListView實(shí)現(xiàn)漂亮的表格效果

    Android中使用ListView實(shí)現(xiàn)漂亮的表格效果

    這篇文章主要介紹了Android中使用ListView實(shí)現(xiàn)漂亮的表格效果,本文用詳細(xì)的代碼實(shí)例創(chuàng)建了一個(gè)股票行情表格,需要的朋友可以參考下
    2014-10-10
  • Android6.0來電號碼與電話薄聯(lián)系人進(jìn)行匹配

    Android6.0來電號碼與電話薄聯(lián)系人進(jìn)行匹配

    這篇文章主要為大家詳細(xì)介紹了Android6.0來電號碼與電話薄聯(lián)系人進(jìn)行匹配的方法,感興趣的小伙伴們可以參考一下
    2016-07-07
  • android: targetSdkVersion升級中Only fullscreen activities can request orientation問題的解決方法

    android: targetSdkVersion升級中Only fullscreen activities can r

    這篇文章主要給大家介紹了關(guān)于Android target SDK和build tool版本升級中遇到Only fullscreen activities can request orientation問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-09-09
  • Android4.X讀取SIM卡短信和聯(lián)系人相關(guān)類實(shí)例分析

    Android4.X讀取SIM卡短信和聯(lián)系人相關(guān)類實(shí)例分析

    這篇文章主要介紹了Android 4.X讀取SIM卡短信和聯(lián)系人相關(guān)類,以實(shí)例形式分析了Android 4.X讀取SIM卡短信和聯(lián)系人的兩個(gè)相關(guān)類的功能、用法與注意事項(xiàng),具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • Android 加載大圖、多圖和LruCache緩存詳細(xì)介紹

    Android 加載大圖、多圖和LruCache緩存詳細(xì)介紹

    這篇文章主要介紹了Android 加載大圖、多圖和LruCache緩存詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Android控件ListView使用方法詳解

    Android控件ListView使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Android控件ListView的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Android中的廣播和廣播接收器代碼實(shí)例

    Android中的廣播和廣播接收器代碼實(shí)例

    這篇文章主要介紹了Android中的廣播和廣播接收器代碼實(shí)例,本文講解了定義一個(gè)廣播接收器、發(fā)送廣播,定義好action標(biāo)志、用Intent發(fā)送、注冊只接收指定action的廣播接收器、取消該廣播接收器等操作代碼實(shí)例,需要的朋友可以參考下
    2015-05-05
  • Dagger2新手入門與使用基礎(chǔ)教程

    Dagger2新手入門與使用基礎(chǔ)教程

    網(wǎng)上隨便搜索一下Dragger2,一大堆文章鋪天蓋地而來,但很多講的不清楚,下面這篇文章主要給大家介紹了關(guān)于Dagger2新手入門與使用基礎(chǔ)教程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2018-04-04
  • Android貝塞爾曲線初步學(xué)習(xí)第二課 仿QQ未讀消息氣泡拖拽黏連效果

    Android貝塞爾曲線初步學(xué)習(xí)第二課 仿QQ未讀消息氣泡拖拽黏連效果

    這篇文章主要為大家詳細(xì)介紹了Android貝塞爾曲線初步學(xué)習(xí)的第二課,仿QQ未讀消息氣泡拖拽黏連效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03

最新評論

南投市| 道孚县| 台前县| 普兰店市| 高清| 高陵县| 锡林浩特市| 健康| 石狮市| 安多县| 隆德县| 湟中县| 临江市| 南充市| 太仓市| 南宁市| 景德镇市| 阳城县| 永和县| 治县。| 铜陵市| 扎赉特旗| 惠来县| 集安市| 舒城县| 湘阴县| 扎囊县| 左贡县| 任丘市| 正镶白旗| 蓬莱市| 汶上县| 九龙坡区| 白水县| 昌吉市| 塔河县| 赣州市| 襄汾县| 运城市| 合阳县| 沙洋县|