91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android怎么獲取其他應用中的assets資源

發布時間:2021-01-14 15:41:47 來源:億速云 閱讀:149 作者:Leah 欄目:移動開發

今天就跟大家聊聊有關Android怎么獲取其他應用中的assets資源,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

一般我們獲取app內的資源肯定是要獲取到Resource這個類,而Resource是通過Context類的getResource獲取到了,所以我們只需要獲取到B應用的Context類就可以了。

可是其他App的Context怎么獲取?其實Context 自己就有構建Context的方法:createPackageContext。

  @Override
  public Context createPackageContext(String packageName, int flags)
    throws PackageManager.NameNotFoundException {
    return mBase.createPackageContext(packageName, flags);
  }

通過我們只需要傳入所需要App的包名,就可以構造出對應App的Context。第二個參數是一個配置標記。

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

第一個標記是讓我們可以通過類加載器去構建相關類,但是需要第二個參數的配合:忽略安全限制。一般Flag就配置這樣個類型。

在創建出Context之后,就可以通過獲取Resource類去獲取對應的資源了。

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

但是assets中的資源就沒有這么方便了。雖然通過context可以獲取到對應的assetsManager,但是在操作assetsManager獲取資源的時候就出現問題了:在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應用

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

看完上述內容,你們對Android怎么獲取其他應用中的assets資源有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

布尔津县| 侯马市| 朝阳市| 桐乡市| 资中县| 五大连池市| 康保县| 两当县| 陇西县| 石城县| 隆昌县| 缙云县| 南雄市| 中超| 泰兴市| 年辖:市辖区| 承德市| 高唐县| 乌什县| 桂东县| 钟山县| 安宁市| 德保县| 望城县| 高邮市| 赤城县| 宜君县| 汕头市| 吉水县| 邳州市| 南木林县| 元氏县| 大竹县| 永嘉县| 饶河县| 扎鲁特旗| 巴青县| 绥棱县| 开远市| 海兴县| 淄博市|