l***@163.com
l***@163.com
  • 发布:2017-11-11 22:11
  • 更新:2020-03-30 11:29
  • 阅读:2241

Android使用Native.js利用反射获取系统api并调用报错

分类:Native.js

如题,这是适配小米沉浸式的,部分代码如下:
var _Build = plus.android.importClass('android.os.Build');
var _Window = plus.android.importClass('android.view.Window');
var _View = plus.android.importClass('android.view.View');
var _Color = plus.android.importClass('android.graphics.Color');

var _activity = plus.android.runtimeMainActivity();
var _window = _activity.getWindow();

if(_Build.VERSION.SDK_INT >= _Build.VERSION_CODES.M) {
if(_Build.MANUFACTURER == 'Xiaomi') {
var _Class = plus.android.importClass('java.lang.Class');
var _MiuiWindowManager = plus.android.importClass('android.view.MiuiWindowManager');
var _MiuiPhoneWindow = plus.android.importClass('com.android.internal.policy.MiuiPhoneWindow');
var _Field = plus.android.importClass('java.lang.reflect.Field');
var _Integer = plus.android.importClass('java.lang.Integer');
var _Method = plus.android.importClass('java.lang.reflect.Method');

    var params = _Class.forName("android.view.MiuiWindowManager$LayoutParams");  
    var field = params.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");  
    var dardModeFlag = field.getInt(params);  

    var clazz = _window.getClass();  
    var extraFlagField = clazz.getMethod("setExtraFlags", _Integer.TYPE, _Integer.TYPE);  
    extraFlagField.invoke(_window, dardModeFlag, dardModeFlag);  
            //_window.setStatusBarColor(_Color.DKGRAY);  
} else {  
    var dectorView = _window.getDecorView();  
    //设置系统状态栏底色为亮         
           dectorView.setSystemUiVisibility(_View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |   
           _View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);  
}  

}
这里调用getMethod时候会报错,尝试用getMethods获取所有方法并遍历得到想要的Method,方法可以得到但是调用就报错(Uncaught Attempt to invoke virtual method 'java.lang.Class java.lang.reflect.Method.getReturnType()' on a null object reference),参数传递没错,我尝试调用无参的方法发现参数里面必须要有一个null可以调用成功,有参的调用就报同样的错,忘哪位大佬帮忙解决

2017-11-11 22:11 负责人:无 分享
已邀请:
g***@126.com

g***@126.com

请问解决了吗?

5***@qq.com

5***@qq.com

请问解决了吗?

该问题目前已经被锁定, 无法添加新回复