android 获取应用的资源id和uri

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

 

比如获取图片

Uri mImageCaptureUri = data.getData();
Bitmap photoBmp = null;
if (mImageCaptureUri != null) {photoBmp = MediaStore.Images.Media.getBitmap(ac.getContentResolver(), mImageCaptureUri);
}

或如下方式

/** * 通过uri获取图片并进行压缩 * * @param uri */  public static Bitmap getBitmapFormUri(Activity ac, Uri uri) throws FileNotFoundException, IOException {  InputStream input = ac.getContentResolver().openInputStream(uri);  BitmapFactory.Options onlyBoundsOptions = new BitmapFactory.Options();  onlyBoundsOptions.inJustDecodeBounds = true;  onlyBoundsOptions.inDither = true;//optional  onlyBoundsOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;//optional  BitmapFactory.decodeStream(input, null, onlyBoundsOptions);  input.close();  int originalWidth = onlyBoundsOptions.outWidth;  int originalHeight = onlyBoundsOptions.outHeight;  if ((originalWidth == -1) || (originalHeight == -1))  return null;  //图片分辨率以480x800为标准  float hh = 800f;//这里设置高度为800f  float ww = 480f;//这里设置宽度为480f  //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可  int be = 1;//be=1表示不缩放  if (originalWidth > originalHeight && originalWidth > ww) {//如果宽度大的话根据宽度固定大小缩放  be = (int) (originalWidth / ww);  } else if (originalWidth < originalHeight && originalHeight > hh) {//如果高度高的话根据宽度固定大小缩放  be = (int) (originalHeight / hh);  }  if (be <= 0)  be = 1;  //比例压缩  BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();  bitmapOptions.inSampleSize = be;//设置缩放比例  bitmapOptions.inDither = true;//optional  bitmapOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;//optional  input = ac.getContentResolver().openInputStream(uri);  Bitmap bitmap = BitmapFactory.decodeStream(input, null, bitmapOptions);  input.close();  return compressImage(bitmap);//再进行质量压缩  }  

三.获取系统资源

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

 

转载于:https://my.oschina.net/ososchina/blog/353692

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android OOM的解决方式

版权声明&#xff1a;本文为博主原创文章。转载请注明出处。 https://blog.csdn.net/Main_Stage/article/details/26150189 尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图&#xff0c;由于这些函数在完毕decode后&#xff0c;终于…

python中的成员运算符_在Python中使用成员运算符的示例

下表列出了所有python语言支持的成员运算符。例如&#xff1a;试试下面的例子就明白了所有的python编程语言提供会员运算符&#xff1a;#!/usr/bin/pythona 10b 20list [1, 2, 3, 4, 5 ];if ( a in list ):print "line 1 - a is available in the given list"else…

(SQL语句)按指定时间段分组统计

我现在有一张表&#xff1a; 列名1 时间 03174190188 2009-11-01 07:17:39.217 015224486575 2009-11-01 08:01:17.153 013593006926 2009-11-12 08:04:46.560 013599584239 2009-11-22 08:53:27.763 013911693526 2009-11-23 08:53:51.683 013846472440 2009…

如何查看Exchange2010中邮箱数据库的用户邮箱占用情况

在EMS界面&#xff0c;用以下命令可以看到数据库的使用情况&#xff0c;并将文件放在指定文件显示&#xff1a; Get-Mailbox -database DBNAME|Get-Mailboxstatistics |sort totalitemsize -desc |ft displayname,totalitemsize,itemcount > D:\report\DBNAME.csv 转载于:ht…

数据库迁移_数据库迁移了解一下

mongodb数据迁移因服务器到期&#xff0c;需要将之前机器上面的数据进行数据迁移&#xff0c;并将服务全部docker化备份首先需要将现有即将到期的服务器上面的mongo数据进行备份mongodump -h dbhost -d dbname -o dbdirectory-h&#xff1a;mongodb所在服务器地址&#xff0c;可…

extern “C”总结

学了就忘&#xff0c;忘了再学。有时感觉自己几乎就是一个跳梁小丑。没有办法&#xff0c;只好多记些笔记。本文版权归作者和博客园共有FROM&#xff1a; http://www.cnblogs.com/graphics/archive/2010/12/24/1916343.html经常看到如下代码&#xff1a;#ifdef _cplusplusexter…

人脸颜值评分软件_在线算个颜值,特科学的那种 | 知多少

用 AI&#xff0c;科学的为颜值打个分。用 AI&#xff0c;打造科学颜值打分器https://www.zhihu.com/video/1185672892095848448图文版本送给不方便打开的朋友 (●u●)」如何科学的为颜值打个分&#xff1f;三庭五眼、四高三低&#xff1f;脸部是否对称&#xff1f;是否与本民族…

图片翻转

图片翻转 原文:图片翻转本人录制技术视频地址&#xff1a;https://edu.csdn.net/lecturer/1899 欢迎观看。这一节继续为大家介绍CSS3的动画效果: 图片翻转。 在iOS中的章节中&#xff0c;我也介绍过类似的效果&#xff0c;如果感兴趣的话&#xff0c;请点击这里查看&#xff1a…

【原】页面跳转以及表单提交中有中文的解决办法

这两天一直碰到一个郁闷的问题&#xff0c;在对表单进行提交的时候&#xff0c;用户名是中文的&#xff0c;怎么测试都不通过, 今天上午突然想起来是不是因为中文字符编码的问题!经过测试&#xff0c;果然是因为这个问题&#xff01; 现在把解决方法贴出来&#xff01;呵呵&…

架构设计学习网址

http://learninghard.blog.51cto.com/all/6146675转载于:https://www.cnblogs.com/haiy/p/4155727.html

实验吧之NSCTF misc250

下载的是一个流&#xff0c;用wireshark打开&#xff0c;由于原题是这样的&#xff1a;小绿在学习了wireshark后&#xff0c;在局域网内抓到了室友下载的小东东0.0 你能帮他找到吗&#xff1f;说明我们应该重点关注http传送的东西&#xff1a; 这里面一共有四个http文件&#x…

西澳大学商科专业排名_澳洲西澳大学优势专业排名多少

澳洲西澳大学优势专业排名多少西澳大学农业和林业专业在2018年QS世界排名中排名第32西澳大学解剖学和生理学专业在2018年QS世界排名中排名第13西澳大学地球与海洋科学专业在2018年QS世界排名中排名第32西澳大学土木结构工程专业在2018年QS世界排名中排名第37西澳大学矿产和采矿…

基于SOUI开发的应用展示

本页面列出基于SOUI开发的产品 欢迎使用SOUI的朋友提供资源&#xff1a;setoutsoft#qq.com #-> U大师 http://www.udashi.com EiisysIM: 是一款为工作场景而设计的企业即时通讯软件, &#xff0c;含PC版和手机版。具有完善的即时通讯、文件传输、语音通话等功能。通讯录由企…

供应商寄售库存管理_【论文解读】物流联合外包下库存管理模式对供应链运作的影响...

物流联合外包下库存管理模式对供应链运作的影响作者&#xff1a;冯颖&#xff0c;林晴&#xff0c;张景雄&#xff0c;张炎治目录 1 引言2 问题描述3 数学模型4 协调模型5 数值算例6 结论1 引言传统库存管理模式下&#xff0c;供应链中各节点企业的库存管理各自为政&#xff0c…

ViewState

因为现在的ASP.NET网站是基于http这种无状态协议的。大家应该都懂。 在ASP.NET的我们提交的一个页面&#xff0c;虽然看起来是一样的&#xff0c;但是他们本质上已经不是同一个页面了。而是我们现在看见的页 面获取了之前提交的那个页面的一些状态值。关于这点&#xff0c;到第…

查看自己Android设备分辨率

/*在Android中加入下面代码&#xff0c;用数据线连接上手机、运行下便知道自己Android设备的分辨率是多少了*/DisplayMetrics mDisplayMetrics new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(mDisplayMetrics);Log.i("Resolution",mDis…

python之布尔值——待补充……

61数据类型 633 3括号&#xff1a;{} [] () 3基本类型: int str bool 1:None 转载于:https://www.cnblogs.com/wjlv/p/10818455.html

SQLserver2000 实例管理工具

1、企业管理器是microsoft管理控制台(Microsoft management console)的一个插件。插件是运行在MMC中的部件、他不能独立运行&#xff0c;但必须包含着MMC中。企业管理器提供MMC形式的界面。像IIS、MTS也是MMC插件 2、查询分析器右边有模板选项卡&#xff0c;可以创建现成的模板…

linux设置nexus开机自启动_CentOS7配置nexus开机自启动

CentOS7配置nexus开机自启动新建nexus启动脚本进入/etc/init.d目录&#xff0c;新建脚本文件nexus// 进入/etc/init.d[rootlinux_maven etc]# cd /etc/init.d/// 新建脚本文件nexus[rootlinux_maven init.d]# vim nexus脚本内容:#!/bin/bash#chkconfig:2345 20 90#description:…

怎么看懂别人的代码

一&#xff0c;程序的结构及流程基本上是顺序&#xff0c;循环&#xff0c;选择。 二&#xff0c;业务数据---->对象形式(js-->{}, new function(){}/Java object) 业务流程---->传入参数&#xff0c;返回值。 流程可以先看作一步&#xff0c;然后再分为两步&#xff…