Android获取所有应用的资源id和对应的uri

来源:互联网 发布:怪物猎人ol激活码淘宝 编辑:程序博客网 时间:2024/06/05 16:04

背景

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

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

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

  • 获取当前应用的资源Id

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

  • 获取其他应用的资源Id

int id = mContext.getResources().getIdentifier("icon", "drawable", "com.android.testproject");// 或者int id = mContext.getResources().getIdentifier("com.android.testproject:drawable/icon", null, null);

  • 整合到一起

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

获取系统资源Id

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

获取资源的Uri

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

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

        

                




作者:蚊子Skeeter

链接:http://www.jianshu.com/p/d3aed93dfbc6