1. 背景
  2.  
  3. 在某些应用中,为了实现应用apk资源放入重复利用,或者使用反射得到本应用的资源,需要使用反射方式获得,但Resources类中也自带了这种获取方式,并且功能更加强大
  4.  
  5. 你可以获取string,color,drawable,raw,xml等文件,因此也就意味着,这里可以获取的资源是res中已定义的资源,对于控件id的获取,暂时无法做到
  6.  
  7. public int getIdentifier(String name, String defType, String defPackage) {
  8. if (name == null) {
  9. throw new NullPointerException("name is null");
  10. }
  11. try {
  12. return Integer.parseInt(name);
  13. } catch (Exception e) {
  14. // Ignore
  15. }
  16. return mAssets.getResourceIdentifier(name, defType, defPackage);
  17. }
  18.  
  19. 获取资源的Id
  20.  
  21. 获取当前应用的资源Id
  22.  
  23. int drawableId = mContext.getResources().getIdentifier("ic_launcher","drawable", mContext.getPackageName());
  24. mImageView.setImageResource(drawableId);
  25.  
  26. 获取其他应用的资源Id
  27.  
  28. int id = mContext.getResources().getIdentifier("icon", "drawable", "com.android.testproject");
  29. // 或者
  30. int id = mContext.getResources().getIdentifier("com.android.testproject:drawable/icon", null, null);
  31.  
  32. 整合到一起
  33.  
  34. public static int getResourceId(Context context, String name, String type, String packageName){
  35. Resources themeResources=null;
  36. PackageManager pm=context.getPackageManager();
  37. try {
  38. themeResources=pm.getResourcesForApplication(packageName);
  39. return themeResources.getIdentifier(name, type, packageName);
  40. } catch (NameNotFoundException e) {
  41.  
  42. e.printStackTrace();
  43. }
  44. return 0;
  45. }
  46.  
  47. 获取系统资源Id
  48.  
  49. int id = getResources().getIdentifier("actionbar_bg", "drawable","android"); //注意,最后一个参数必须是“android”
  50.  
  51. 获取资源的Uri
  52.  
  53. android系统中,应用的资源存储时也通常会被存入 数据库,也可以被共享,
  54. 因此来说资源也可以获得uri
  55.  
  56. public static Uri getResourceUri(int resId,String packageName) {
  57. return Uri.parse("android.resource://"+packageName+"/"+resId);
  58. }

Android获取所有应用的资源id和对应的uri的更多相关文章

  1. Android库项目中的资源ID冲突

    1.前言 Android Studio对模块化开发提供的一个很有用的功能就是可以在主项目下新建库项目(Module),但是在使用库项目时却有一个问题就是资源ID冲突,因为编译时SDK会自动帮我们处理这 ...

  2. ANDROID开发中资源文件和资源ID是如何映射的

    http://tweetyf.org/2013/02/mapping_between_res_resid_android.html

  3. Android 获取有规律资源Id解决方案

    在多个有规律的资源ID获取的时候,可以使用getIdentifier方法来获取,来获取. 用到场景:工具类打成.jar包的时候,有时候会需要引用到res中的资源,这时候不能将资源一起打包,只能通过反射 ...

  4. [Android学习笔记]使用getIdentifier()获取资源Id

    使用getIdentifier()获取资源Id Android中可以使用getIdentifier()获取资源ID ex: 根据图片名称获取图片Id private int getImageResId ...

  5. Android根据字符串型的资源名获取对应资源id

    有时候我们想动态的根据一个字符串资源名获得到对应的资源id,如根据不同的图片名称获得对应的图片,此时就应该考虑如何实现. 大家知道,在编译Android工程时,系统会自动生成一个静态资源类R,里面根据 ...

  6. 【我的Android进阶之旅】Android使用getIdentifier()方法根据资源名来获取资源id

    有时候我们想动态的根据一个资源名获得到对应的资源id,就可以使用getResources().getIdentifier()方法来获取该id.然后再使用该id进行相关的操作. 1.Demo示例 下面用 ...

  7. Android 通过名称获取资源ID

    当我们获取网络数据的时候,解析之后往往都是一个字符串,而不是资源id,所有我们没有办法直接使用,只能通过名称来获取到资源id, package com.example.administrator.de ...

  8. Android-使用getIdentifier()获取资源Id

    使用getIdentifier()获取资源Id int i= getResources().getIdentifier("icon", "drawable", ...

  9. Android_使用getIdentifier()获取资源Id

    Android 获取资源ID的另外一种方法,常规获取ID是在特定的文件夹下面的资源,如果在比较特殊的文件夹下面,就需要其他方法获取ID 了: 使用getIdentifier()方法可以方便的获各应用包 ...

随机推荐

  1. 深度扫盲O2O

    http://www.ftchinese.com/interactive/5038?i=3 http://www.ftchinese.com/interactive/5038?i=3

  2. monggodb 模糊查询

    MongoDB的模糊查询其实很简单:      11.LIKE模糊查询userName包含A字母的数据(%A%)       SQL:SELECT * FROM UserInfo WHERE user ...

  3. kafka-docker----(how to setup http proxy in container??)

    https://github.com/wurstmeister/kafka-docker environment: KAFKA_ADVERTISED_HOST_NAME: 10.10.160.243 ...

  4. cocos2d 场景切换和弹出场景、收回场景

    场景弹出收回很简单 用以下代码在任意一个地方显示“设置场景”: [[CCDirector sharedDirector] pushScene:[Settings scene]]; 如果你身处“设置场景 ...

  5. java连接elastic search 9300

    java连接elastic search 导入jar包:https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/_maven ...

  6. leetcode -day 15 Distinct Subsequences

    1.  Distinct Subsequences  Given a string S and a string T, count the number of distinct subsequen ...

  7. JVM虚拟机—JVM的类加载机制

    1 什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构 ...

  8. Ubuntu14.04安装QT5.5

    1.进入qt目录下,修改qt安装文件属性 2:执行./qt-opensource-linux-xXXX; 3.启动Qt Creater:进入Qt5./Tools/QtCreater/bin/,可以鼠标 ...

  9. CKEditor的下载、配置与使用

    CKEditor简介: CKEditor 是一款功能强大的开源在线文本编辑器.它所见即所得的特点,使你在编辑时所看到的内容和格式,能够与发布后看到的效果完全一致.CKEditor 完全是基于 Java ...

  10. Codeforces Round #302 (Div. 2)

    A. Set of Strings 题意:能否把一个字符串划分为n段,且每段第一个字母都不相同? 思路:判断字符串中出现的字符种数,然后划分即可. #include<iostream> # ...