android raw获取uri_Android获取所有应用的资源id和对应的uri

背景

在某些应用中,为了实现应用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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值