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”

相关文章推荐

如何将资源文件夹raw里的文件路径转化成uri

在android编程时,常有一些视频或者音频等文件要放在资源文件夹raw里,在引用他们的时候,往往需要他们的uri。 那么如何将资源文件raw文件夹里的文件路径转化成uri呢? 用下面的代码就搞定了:...

Android应用程序资源的查找过程分析

我们知道,在Android系统中,每一个应用程序一般都会配置很多资源,用来适配不同密度、大小和方向的屏幕,以及适配不同的国家、地区和语言等等。这些资源是在应用程序运行时自动根据设备的当前配置信息进行适...

Android把res/raw的资源转化为Uri形式访问

(android.resource://) Andorid应用会在打包成Apk时把应用中使用的资源文件都打包进去了,尤其是我们熟悉的assets和res文件夹里面存放的资源文件, 一般情况下我们...

通过id或者uri获取联系人信息

Uri uri = data.getData(); Cursor cursor = getActivity().getContentResolver().query(uri, null, ...

操作Android中联系人,通话记录,短息,的URI-项海涛

记住读取联系人需要配置权限: 读取联系人的URI:/** * 所有联系人的查询语句 * cota...

android中ContactsContract获取联系人的方法

从Android 2.0 SDK开始有关联系人provider的类变成了ContactsContract,虽然老的android.provider.Contacts能用,但是在SDK中标记为为depr...

drawable中的图片转换成URI的方法

/* 今天在需要使用一些假数据进行展示的时候,用到res/drawable目录下的图片Uri,而这个Uri该如何转换呢?下面就是这Uri的生成方法:先要实例化一个Resources  r;*/ ...

Android中获取资源的id和url方法总结

一,获取android工程里面的各种资源的id; 1.1 string型 比如下面: > 客户端请求成功 >//string资源中 名称为OK的 id 获取方式 int strI...

适配android7.0:获取文件的Uri

前言Android 7.0已经发布很久了,虽然市场份额还不是很高,但是流行起来都是早晚的事,所以适配Android 7.0刻不容缓。Android 7.0 对系统进行了很多的优化:例如文件访问权限,省...

Android 资源 id 转换成 Uri 的小助手

public static final String ANDROID_RESOURCE = “android.resource://”; public static final String FOR...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android使用获取所有应用的资源id和uri
举报原因:
原因补充:

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