android使用获取所有应用的资源id和uri

转载 2016年05月30日 17:16:56

在某些应用中,为了实现应用apk资源放入重复利用,或者使用反射得到本应用的资源,需要使用反射反射方式获得,但Resources类中也自带了这种获取方式,并且功能更加强大


你可以获取string,color,drawable,raw,xml等文件,因此也就意味着,这里可以获取的资源是res中已定义的资源,对于控件id的获取,暂时无法做到


android.content.res.Resources.class

 public int getIdentifier(String name, String defType, String defPackage) {
        if (name == null) {
            throw new NullPointerException("name is null");
        }
        try {
            return Integer.parseInt(name);
        } catch (Exception e) {
            // Ignore
        }
        return mAssets.getResourceIdentifier(name, defType, defPackage);
    }
一.获取资源的id

1.如下,我们可以获取当前应用的资源id

 int drawableId = mContext.getResources().getIdentifier("ic_launcher","drawable", mContext.getPackageName());
 mImageView.setImageResource(drawableId);

2.我们也可以获取其他应用的资源id

Resources resources = context.getResources();
int indentify= getResources().getIdentifier("icon""drawable""org.anddev.android.testproject");

int resId = getResources().getIdentifier("background""color", getPackageName());
startBtn.setTextColor(getResources().getColor(resId));

对于这种方式,我们也可以这么做

int indentify = getResources().getIdentifier(org.loveandroid.androidtest:drawable/icon",null,null);


3.进行封装一下

public static int getResourceId(Context context,String name,String type,String packageName){
        Resources themeResources=null;
        PackageManager pm=context.getPackageManager();
        try {
            themeResources=pm.getResourcesForApplication(packageName);
            return themeResources.getIdentifier(name, type, packageName);
        } catch (NameNotFoundException e) {

            e.printStackTrace();
        }
        return 0;
 }


二.获取资源的uri

android系统中,应用的资源存储时也通常会被存入 数据库,也可以被共享,因此来说资源会获得应用的uri

Uri uri = Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.xinyueshenhua);
Uri uri = Uri.parse("android.resource://"+getPackageName()+"/"+R.drawable.ic_launcher);

我们也可以进一步封装

public static  Uri getResourceUri(int resId,String packageName)
{
    return Uri.parse("android.resource://"+packageName+"/"+resId);
}


三.获取系统资源

int indentify = getResources().getIdentifier("actionbar_bg""drawable","android");  //注意,最后一个参数必须是“android”

C#中关于使用Uri来找项目中文件路径的方法

new Uri(@"/SilverlightTest;component/images/1.png", UriKind.Relative) 其中/SilverlightTest;component这...
  • XueminXu
  • XueminXu
  • 2013年11月04日 17:51
  • 2071

Uri取用raw資源

转:http://hi.baidu.com/joyhub2140/blog/item/abc1fc89203c058fa4c272c0.html 下面程式是在引發Notification功能時,播放...
  • java2009cgh
  • java2009cgh
  • 2012年05月09日 13:45
  • 7840

res drawable目录下图片Uri

http://liuyun025.iteye.com/blog/1280838 有时候,我们要用到res/drawable目录下的图片Uri,而这个Uri该如何生存呢...
  • Jason_WKS
  • Jason_WKS
  • 2012年05月03日 11:38
  • 7615

Android Uri获取真实路径以及文件名的方法

在Android 编程中经常会用到uri转化为文件路径 下面是4.4后通过Uri获取路径以及文件名一种方法 public static String getRealFilePath( final C...
  • MikoGodZd
  • MikoGodZd
  • 2016年03月25日 14:36
  • 13156

在Android下利用Shell命令管理网络接口

为啥要使用shell命令操纵本地网络?因为这样就可以绕过上层connectService来干一些事情,至于具体要干点什么事情,容我先卖个关子在以后的blog里说明。 首先进入adb shell,然后...
  • ROger__wonG
  • ROger__wonG
  • 2012年07月05日 10:25
  • 8988

Android中的UID和AppId

本篇博客主要记录一下Android中UID的含义,并简单分析应用appId的分配流程。
  • Gaugamela
  • Gaugamela
  • 2017年12月02日 15:09
  • 378

Android 获取资源数据/文件

 从res/raw或assets文件夹中获取资源文件: *res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。   *r...
  • u011562107
  • u011562107
  • 2014年06月26日 20:31
  • 822

Android res/raw 和 assets 使用

今天在研究通知栏的时候,不想用系统默认的提示音,就想着自定义提示音,了解到可以可以在项目中添加raw文件夹或者assets文件夹来存放音频,使用raw的话是放在res下面的,也就是说可以直接用过R.r...
  • Sean_css
  • Sean_css
  • 2016年04月10日 22:42
  • 4723

Android把res/raw的资源转化为Uri形式访问(android.resource://)

 如何访问平时APK文件Res目录下的内容呢? 如果直接访问Apk下的assets目录可以使用AssetManager类处理,而需要访问res/raw这样的文件夹怎么办呢?   APK...
  • gpf1320253667
  • gpf1320253667
  • 2015年10月28日 15:59
  • 369

Android中关于assets和raw播放音频视频的实践

Android开发中经常要播放音频视频等文件,比如扫描到二维码条形码用“嘀”一声来提示用户,比如刷微博刷新会播放一个声音,再比如有的APP在开启后会播放一段动画(视频),等等。这些文件保存在工程的as...
  • ada_dengpan
  • ada_dengpan
  • 2016年03月01日 21:31
  • 12941
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android使用获取所有应用的资源id和uri
举报原因:
原因补充:

(最多只允许输入30个字)