【Android】反射

package com.example.myandroidtest;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

import android.R.integer;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;


public class MainActivity extends BaseActivity {
     Class<?> bclazz;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e("tag", "=MainActivity=onCreate=");
        try{
            //获取指定类的class对象
            Class<?> clazz = Class.forName("android.app.Notification");
            //clazz.newInstance();
            //获得所有构造函数
            Constructor[] constructors=clazz.getConstructors();
            for (Constructor constructor : constructors) {
                Log.e("Constructor反射构造函数:","");
                    //取出第i个构造方法。
                System.out.print(Modifier.toString(constructor.getModifiers()));
                //---- 打印该构造方法的前缀修饰符
                System.out.print(" "+constructor.getName()+"("); //打印该构造方法的名字
                //---- 打印该构造方法的参数。
                Class[] parameterTypes=constructor.getParameterTypes(); //构造方法参数集但是 数组类型显示特殊
                for(int j=0;j<parameterTypes.length;j++) 
                {
                    System.out.print(parameterTypes[j].getName());
                }
                System.out.println(")");
            }
            //修饰符 -类名 -超类名 -接口
            Log.e("Notification反射包名", Modifier.toString(clazz.getModifiers())+" "
              +clazz.getPackage().getName()+" extends "+clazz.getSuperclass()+" implement "+clazz.getInterfaces().getClass().getName());
            //所有字段
            Field[] fields=clazz.getDeclaredFields();
            //所有public字段
            //Field[] fields=clazz.getFields();
            for(Field field : fields)
            {   //数组特殊处理
                if (field.getType().isArray()) {
                    Log.e("Notification反射属性", field.getType().getComponentType()+" "+field.getName());
                } else {
                    Log.e("Notification反射属性", field.getType()+" "+field.getName());
                }
            }
            //所有方法
           Method[] methods =clazz.getDeclaredMethods();
           //所有public方法
           //Method[] methods =clazz.getMethods();

           for(Method method : methods)
           {
               Log.e("Notification method反射name", Modifier.toString(method.getModifiers())+" "+method.getName());
             
           }
           
        }catch (Exception e){
            e.printStackTrace();
            Log.e("Notification反射错误", "Exception");
        }
    
    try{
        //获得指定包的Context对象
        Context c = createPackageContext("com.example.myandroidtest", Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
        //获得class对象
        bclazz = Class.forName("android.bluetooth.BluetoothManager");
        //所有构造函数
        Constructor[] constructors=bclazz.getDeclaredConstructors();
        //所有public构造函数
        //Constructor[] constructors=bclazz.getConstructors();
        for (Constructor constructor : constructors) {
            Log.e("Constructor反射构造函数:","");
             //取出第i个构造方法。
            System.out.print(Modifier.toString(constructor.getModifiers()));
            //---- 打印该构造方法的前缀修饰符
            System.out.print(" "+constructor.getName()+"("); //打印该构造方法的名字
            //---- 打印该构造方法的参数。
            Class[] parameterTypes=constructor.getParameterTypes(); //构造方法参数集但是 数组类型显示特殊

            for(int j=0;j<parameterTypes.length;j++) 
            {
            System.out.print(parameterTypes[j].getName());
            }
            System.out.println(")");
            //constructor.newInstance(c);//实例化
        }
        //有参数构造函数
        Constructor con = bclazz.getConstructor(Context.class);
        //创建它的一个对象
        //Object maObject = bclazz.newInstance();//构造函数无参数实例化     
        Log.e("calzz 是否为Null", ""+(bclazz==null));
        Log.e("BluetoothManager反射包名", Modifier.toString(bclazz.getModifiers())+" "
                +bclazz.getPackage().getName()+" extends "+bclazz.getSuperclass()+" implement "+bclazz.getInterfaces().getClass().getName());
        //所有字段
        Field[] fields=bclazz.getDeclaredFields();
        for(Field field : fields)
        {
            if (field.getType().isArray()) {
                Log.e("BluetoothManager反射属性", field.getType().getComponentType()+" "+field.getName());
            } else {
                Log.e("BluetoothManager反射属性", field.getType()+" "+field.getName());
            }
            
        }
        
       //获得所有方法
       Method[] methods =bclazz.getDeclaredMethods();
       for(Method method : methods)
       {
           Log.e("BluetoothManager method反射name", ""+method.getName());
           if (method.getName().equals("getAdapter")) {
               //执行方法
               method.invoke(con.newInstance(c));
        }
       }   
    }catch (Exception e){
        e.printStackTrace();
        Log.e("calzz 是否为Null", ""+(bclazz==null));
        Log.e("BluetoothManager反射错误", "Exception");
    }
    }


  
}

 

posted @ 2015-10-12 17:45  绚丽星空  阅读(1230)  评论(0编辑  收藏  举报