日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 获取应用的资源id和uri

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 获取应用的资源id和uri 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

在某些應用中,為了實現應用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

總結

以上是生活随笔為你收集整理的android 获取应用的资源id和uri的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。