android 通過反射機制例項化靜態內部類
阿新 • • 發佈:2018-12-26
以android通知為例:
獲取Notification.Builder,其中Builder為Notification的靜態內部類,鑑於Android 8.0通知的新特性,在new一個Builder的時候需要傳參ChannalId,所以需要適配低版本,
public static Notification.Builder getNotificationBuilder(Context context) { Notification.Builder builder = null; if (Build.VERSION.SDK_INT >= ToucConstants.VERSION_CODES_O) { builder = (Notification.Builder) getObjectFromInnerClass("android.app.Notification$Builder", context); } else { builder = new Notification.Builder(context); } return builder; } public static Object getObjectFromInnerClass(String clsName, Context context) { Object obj = null; try { Class c = Class.forName(clsName); if (c != null) { Constructor constructor = c.getDeclaredConstructor(newClass[]{Context.class, String.class}); if (constructor != null) { obj = constructor.newInstance(context, id); } } } catch (Exception e) { e.printStackTrace(); } return obj; }