多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > php教程 > Java反射獲取Android系統(tǒng)屬性值

Java反射獲取Android系統(tǒng)屬性值

來(lái)源:程序員人生   發(fā)布時(shí)間:2015-06-01 08:30:03 閱讀次數(shù):2838次

目錄

  • 目錄
  • 反射定義
  • 為什么需要反射
  • 反射方法Method
    • getDeclaredMethod方法
    • getMethod方法
    • 參數(shù)解釋
    • invoke方法
  • Android 反射利用


反射定義

“反射”(Reflection)能夠讓運(yùn)行于JVM中的程序檢測(cè)和修改運(yùn)行時(shí)的行動(dòng)。


為什么需要反射

反射帶來(lái)的好處包括:

  1. 在運(yùn)行時(shí)檢測(cè)對(duì)象的類型。
  2. 動(dòng)態(tài)構(gòu)造某個(gè)類的對(duì)象。
  3. 檢測(cè)類的屬性和方法。
  4. 任意調(diào)用對(duì)象的方法。
  5. 修改構(gòu)造函數(shù)、方法、屬性的可見(jiàn)性。

反射方法Method


getDeclaredMethod方法

聲明以下:

public Method getDeclaredMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException

解釋:

返回1個(gè)Method對(duì)象,該對(duì)象反應(yīng)此Class對(duì)象所表示的類或接口的指定已聲明方法
1. name : 是1個(gè)String,它指定所需方法的簡(jiǎn)稱。
2. parameterTypes:是1個(gè)Class對(duì)象的變長(zhǎng)數(shù)組,它按聲明順序標(biāo)識(shí)該方法的形參類型

注意
getDeclaredMethod獲得該類聲明的public方法或protected方法,但是不包括繼承的方法。


getMethod方法

聲明以下:

public Method getMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException

解釋:

返回1個(gè)Method對(duì)象,該對(duì)象反應(yīng)此Class對(duì)象所表示的類或接口的指定公共成員方法
1. name : 是1個(gè)String,它指定所需方法的簡(jiǎn)稱。
2. parameterTypes:是1個(gè)Class對(duì)象的變長(zhǎng)數(shù)組,它按聲明順序標(biāo)識(shí)該方法的形參類型


參數(shù)解釋

name參數(shù)就不需要解釋了,就是調(diào)用類的方法名稱。

可能很多同學(xué)剛接觸這個(gè)方法的時(shí)候,會(huì)對(duì)parameterTypes參數(shù)產(chǎn)生疑問(wèn),例如這個(gè)參數(shù)為何是Class泛型變長(zhǎng)數(shù)組,其實(shí)舉個(gè)例子就很好理解了。

假定我們要反射的方法有4個(gè)參數(shù),函數(shù)原型以下:

public void printInfo(String str, int iNum, double dNum, long i);

那我們通過(guò)返回獲得這個(gè)Method對(duì)象的時(shí)候,傳的parameterTypes以下所示:

getMethod("printInfo", String.class, int.class, double.class, long.class);

所以,parameterTypes其實(shí)就是對(duì)方法形參的類型抽象。


invoke方法

聲明以下:

public Object invoke(Object obj, Object... args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException

解釋:

Method類的invoke(Object obj, Object… args)方法接收的參數(shù)必須為對(duì)象。其中:
1. obj : 從中調(diào)用底層方法的對(duì)象。
2. args :用于方法調(diào)用的參數(shù)。


Android 反射利用

我們知道,Android有些類是沒(méi)有在SDK中開(kāi)放的,例如你需要獲得系統(tǒng)屬性,需要調(diào)用到SystemProperties類的get方法,但是這個(gè)類并沒(méi)有在SDK中公然,我們可以在Android源碼中查看1下這個(gè)類:

package android.os; import java.util.ArrayList; import android.util.Log; /** * Gives access to the system properties store. The system properties * store contains a list of string key-value pairs. * * {@hide} */ public class SystemProperties { // 省略具體實(shí)現(xiàn)代碼 /** * Get the value for the given key. * @return an empty string if the key isn't found * @throws IllegalArgumentException if the key exceeds 32 characters */ public static String get(String key) { if (key.length() > PROP_NAME_MAX) { throw new IllegalArgumentException("key.length > " + PROP_NAME_MAX); } return native_get(key); } }

可以看到,這個(gè)前面有1個(gè)@hide標(biāo)簽,所以這個(gè)類是沒(méi)法直接在代碼中調(diào)用的。

但是,在Android利用中,很多時(shí)候我們需要獲得得手機(jī)類型屬性(ro.product.model)。所以,這個(gè)時(shí)候,我們就需要在利用層反射SystemProperties類,調(diào)用get方法。具體實(shí)現(xiàn)源碼以下:

import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import android.util.Log; public class SystemProperties { public static String get(String key) { String value = ""; Class<?> cls = null; try { cls = Class.forName("android.os.SystemProperties"); Method hideMethod = cls.getMethod("get", String.class); Object object = cls.newInstance(); value = (String) hideMethod.invoke(object, key); } catch (ClassNotFoundException e) { Log.e("zhengyi.wzy", "get error() ", e); } catch (NoSuchMethodException e) { Log.e("zhengyi.wzy", "get error() ", e); } catch (InstantiationException e) { Log.e("zhengyi.wzy", "get error() ", e); } catch (IllegalAccessException e) { Log.e("zhengyi.wzy", "get error() ", e); } catch (IllegalArgumentException e) { Log.e("zhengyi.wzy", "get error() ", e); } catch (InvocationTargetException e) { Log.e("zhengyi.wzy", "get error() ", e); } return value; } }
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 校园激情春色 | 国产在线视频国产永久视频 | 麻豆一区二区免费播放网站 | 久久久久久久久久久久久久久久久久久久 | 亚洲欧美视频一区 | 91porn国产在线观看 | 国产欧美国产精品第二区 | 蜜桃色永久入口 | 亚洲一区第一页 | 九九久久99综合一区二区 | 欧美高清精品 | 一区二区在线精品免费视频 | 一区二区三区不卡在线观看 | 一本大道道无香蕉综合在线 | www在线观看视频免费 | 久久一区二区三区免费播放 | 网站大全黄免费 | 亚州欧美| 一二三四在线手机观看视频 | 鸡毛片 | 综合久久久久综合 | 日本欧美一区二区三区高清 | 天天综合亚洲国产色 | tube欧美69xxxx| 国产h肉在线视频免费观看 国产h视频 | 波多野结衣久久 | 国产精品久久久久久久久久直 | 久久精品7 | 福利一区二区三区视频午夜观看 | 日本一区二区视频在线观看 | 99精品国产成人a∨免费看 | 国产精品区一区二区免费 | 女人l8毛片a一级毛片免费 | 成年人视频免费网站 | japanese18—23护士 | 亚洲成人免费视频在线 | 青春草久久| 免费国产zzzwww色 | 一区二区影视 | 久久久久久一级毛片免费无遮挡 | 日韩精品区 |