• 利用java反射机制,使用android系统的内部类成员函数


    			//访问某个属性
                Context mmsCtx = createPackageContext("com.android.lockscreen",  
    			        Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);  
    			Class<?> maClass = Class.forName("com.android.lockscreen.LockScreenActivity", true, mmsCtx.getClassLoader());  
    			
    			Object maObject = maClass.newInstance();
    			Field f_mPm = maClass.getDeclaredField("TAG");  
    			f_mPm.setAccessible(true);              
    				Log.i(LOG_TAG, "___________________________________________obj:"+f_mPm.get(maObject));
    

      

    //访问方法

        	
    //访问
    try {
    			Context mmsCtx = createPackageContext("com.android.lockscreen",  
    			        Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);  
    			Class<?> maClass = Class.forName("com.android.lockscreen.LockScreenActivity", true, mmsCtx.getClassLoader());  
    			
    			Object maObject = maClass.newInstance();
    			Field f_mPm = maClass.getDeclaredField("TAG");  
    			
    			//maClass.getDeclaredMethod("", parameterTypes);
    			f_mPm.setAccessible(true);              
    			Log.i(LOG_TAG, "___________________________________________obj:"+f_mPm.get(maObject));
    				
    			
    				Class[] resource = new Class[]{Context.class};
    				Object[] resourceObj = new Object[]{mmsCtx};
    				
    				Method addsMethod = maClass.getDeclaredMethod("getLockScreenView", resource);
    				addsMethod.setAccessible(true);
    				
    				View addsResult = (View)addsMethod.invoke(maObject, resourceObj);
    				Log.i(LOG_TAG, "___________________________________________addsResult:"+addsResult);
    				
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    
    //定义被访问
    
    public class LockScreenActivity extends Activity {
    		
    	private String TAG = "LockScreenActivity";
    	//private LockScreen mScreen = new LockScreen(LockScreenActivity.this);
    	
    	private LockScreen getLockScreenView(Context context){
    		
    		Log.i(TAG, "_________________________________________context:"+context);
    		return new LockScreen(context);
    	}
    	
    }
    

      

    //获取setting包的的Context  
                Context mmsCtx = createPackageContext("com.android.settings",  
                        Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);  
                //使用setting的classloader加载com.android.settings.ManageApplications类  
                Class<?> maClass = Class.forName("com.android.settings.ManageApplications", true, mmsCtx.getClassLoader());  
                //创建它的一个对象  
                Object maObject = maClass.newInstance();  
                  
                /* 
                 * 将私有域mPm赋值。因为mPm在SizeObserver的invokeGetSize中用到了, 
                 * 却因为没有执行onCreate而没有初始化,所以要在此处初始化。 
                 */  
                Field f_mPm = maClass.getDeclaredField("mPm");  
                f_mPm.setAccessible(true);              
                f_mPm.set(maObject, mmsCtx.getPackageManager());  
                  
    

      

  • 相关阅读:
    常见的Mysql十款高可用方案
    01 . OpenResty简介部署,优缺点,压测,适用场景及用Lua实现服务灰度发布
    08 . Jenkins之SpringCloud微服务+Vue+Docker持续集成
    TomcatAJP文件包含漏洞及线上修复漏洞
    Nginx升级加固SSL/TLS协议信息泄露漏洞(CVE-2016-2183)和HTTP服务器的缺省banner漏洞
    03 . Go开发一个日志平台之Elasticsearch使用及kafka消费消息发送到Elasticsearch
    关于本博客皮肤样式配置
    01 . etcd简介原理,应用场景及部署,简单使用
    Spring Cloud Config
    Spring Cloud Gateway
  • 原文地址:https://www.cnblogs.com/wanqieddy/p/2224200.html
Copyright © 2020-2023  润新知