日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > Java反射獲取Android系統屬性值

Java反射獲取Android系統屬性值

來源:程序員人生   發布時間:2015-06-01 08:30:03 閱讀次數:2843次

目錄

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


反射定義

“反射”(Reflection)能夠讓運行于JVM中的程序檢測和修改運行時的行動。


為什么需要反射

反射帶來的好處包括:

  1. 在運行時檢測對象的類型。
  2. 動態構造某個類的對象。
  3. 檢測類的屬性和方法。
  4. 任意調用對象的方法。
  5. 修改構造函數、方法、屬性的可見性。

反射方法Method


getDeclaredMethod方法

聲明以下:

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

解釋:

返回1個Method對象,該對象反應此Class對象所表示的類或接口的指定已聲明方法
1. name : 是1個String,它指定所需方法的簡稱。
2. parameterTypes:是1個Class對象的變長數組,它按聲明順序標識該方法的形參類型

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


getMethod方法

聲明以下:

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

解釋:

返回1個Method對象,該對象反應此Class對象所表示的類或接口的指定公共成員方法
1. name : 是1個String,它指定所需方法的簡稱。
2. parameterTypes:是1個Class對象的變長數組,它按聲明順序標識該方法的形參類型


參數解釋

name參數就不需要解釋了,就是調用類的方法名稱。

可能很多同學剛接觸這個方法的時候,會對parameterTypes參數產生疑問,例如這個參數為何是Class泛型變長數組,其實舉個例子就很好理解了。

假定我們要反射的方法有4個參數,函數原型以下:

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

那我們通過返回獲得這個Method對象的時候,傳的parameterTypes以下所示:

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

所以,parameterTypes其實就是對方法形參的類型抽象。


invoke方法

聲明以下:

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

解釋:

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


Android 反射利用

我們知道,Android有些類是沒有在SDK中開放的,例如你需要獲得系統屬性,需要調用到SystemProperties類的get方法,但是這個類并沒有在SDK中公然,我們可以在Android源碼中查看1下這個類:

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 { // 省略具體實現代碼 /** * 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); } }

可以看到,這個前面有1個@hide標簽,所以這個類是沒法直接在代碼中調用的。

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

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; } }
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 午夜在线网站 | 国产3p视频 | 九九视频网 | 国产精品五区 | 欧美日韩一区二区三区视频 | 亚洲欧美一区二区三区 | 免费福利av| 亚洲高清网站 | 亚洲人人 | 日本精品中文字幕 | 国产专区在线播放 | av在线入口 | 91精品久久久久久久99蜜桃 | 欧美一区二区三区在线视频 | 欧美专区亚洲专区 | 欧美日韩国产综合另类 | 成人高清在线视频 | 成人毛片网| 亚洲视频二区 | 国产亚洲视频在线 | 国产一区一一区高清不卡 | 一级看片 | www.成人| 欧美日韩一区二区三区不卡视频 | 精品国产免费一区二区三区四区 | 久久久久久国产一区二区三区 | 激情福利视频 | 久久国产精品精品 | 久久国产欧美一区二区三区精品 | 国产精品五区 | 国产二区精品在线观看 | 日韩欧美国产一区二区三区 | 成人激情视频 | 国产成人久久精品麻豆二区 | 国产精品美女一区二区 | 精品日韩欧美 | 国产小视频在线 | 少妇精品久久久一区二区三区 | 日韩精品在线电影 | 蜜桃精品一区二区三区 | 精品久久久久一区二区国产 |