添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
android 常见问题 我要提意见

Native.js for Android封装一条通过JS语法直接调用Native Java接口通道,通过plus.android可调用几乎所有的系统API。

currentWebview : 获取当前Webview窗口对象的native层实例对象 newObject : 创建实例对象 getAttribute : 获取对象(类对象/实例对象)的属性值 setAttribute : 设置对象(类对象/实例对象)的属性值 implements : 实现Interface的方法 importClass : 导入Java类对象 invoke : 调用对象(类对象/实例对象)的方法 requestPermissions : 请求权限 runtimeMainActivity : 获取应用主Activity实例对象 autoCollection : 自动回收对象 ClassObject : Java类对象 InstanceObject : Java实例对象

回调方法:

AndroidSuccessCallback : 成功回调函数 AndroidErrorCallback : 错误回调函数

5+功能模块(permissions)

// ... "permissions":{ // ... "Invocation": { "description": "Native.js"

currentWebview

获取当前Webview窗口对象的native层实例对象

InstanceObject plus.android.currentWebview(); Android平台完整Java类名为android.webkit.Webview,完整API请参考Android开发文档 InstanceObject Webview窗口对象的native层android.webkit.Webview实例对象,如果调用方法失败,则返回null。 // 通过Webview原生窗口对象打开页面 function loadURL(){ var nwv=plus.android.currentWebview(); plus.android.invoke(nwv,"loadUrl","http://www.dcloud.io/");

uni-app使用plus注意事项

newObject

创建实例对象

void plus.android.newObject( String classname, Object..args );
  • classname: String 必选 要创建实例对象的类名,使用"."分割命名空间

    如果指定的类名不存在,则创建对象失败,不会抛出异常。

  • args: Object 可选 创建实例对象的构造参数

    如果指定的构造参数类型不区配,则创建对象失败,不会抛出异常。 InstanceObject : Android实例对象,如果创建对象失败则返回null。

    示例:

    // 直接创建android.content.Intent类的实例对象 var intent = plus.android.newObject("android.content.Intent");

    uni-app使用plus注意事项

    getAttribute

    获取对象(类对象/实例对象)的属性值

    Object plus.android.getAttribute( Object obj, String name ); IntanceObject ClassObject String 必选 要获取属性值的对象,也可以是类的名称

    如果obj为实例对象(InstanceObject),则获取的是实例的属性值; 如果obj为类对象(ClassObject),则获取的是类的静态属性值; 如果obj为字符串类型,其值必须是类的名称,则获取是类的静态属性值;

  • name: String 必选 要获取的属性名称

    如果指定的属性名称不存在,则获取属性失败,不会抛出异常。

    Object : 属性值对象,如果获取属性失败则返回null。

    示例:

    // 通过以下方法获取内存信息 function getMemInfo(){ var Context = plus.android.importClass("android.content.Context"); var ActivityManager = plus.android.importClass("android.app.ActivityManager"); var mi = new ActivityManager.MemoryInfo(); var activityService = plus.android.runtimeMainActivity().getSystemService(Context.ACTIVITY_SERVICE); activityService.getMemoryInfo(mi); // 获取mi对象的availMem属性值 var memoryInfo = plus.android.getAttribute(mi,"availMem");

    uni-app使用plus注意事项

    setAttribute

    设置对象(类对象/实例对象)的属性值

    void plus.android.setAttribute( Object obj, String name, Object value ); InstanceObject 必选 要设置属性值的对象,也可以是类的名称

    如果obj为实例对象(InstanceObject),则设置的是实例的属性值; 如果obj为类对象(ClassObject),则设置的是类的静态属性值; 如果obj为字符串类型,其值必须是类的名称,则设置是类的静态属性值;

  • name: String 必选 要设置的属性名称

    如果指定的属性名称不存在,则操作不生效,不会抛出异常。

  • value: Object 必选 要设置的属性值

    如果指定的属性值类型不区配,则操作不生效,不会抛出异常。 : 无

    示例:

    // 如Test类存在mCount属性,通过以下方法设置属性值 function testAttribute(){ var Test = plus.android.importClass("io.dcloud.Test"); var test = new Test(); // 设置test对象的count属性值 plus.android.setAttribute(test,10);

    uni-app使用plus注意事项

    implements

    实现Interface的方法

    Object plus.android.implements( String name, Object obj );
  • name: String 必选 Interface的名称,也可以是自定的字符串名称

    如果name为自定的字符串名称,则自定义一个Interface; Object 必选 JSON对象类型,Interface实现方法的定义

    JSON对象中key值为Interface方法的名称;value值为Function。 InstanceObject : Interface实例对象。

    示例:

    // 如存在接口NjsHelloEvent定义如下 //public interface NjsHelloEvent { // public void onEventInvoked( String name ); // 实现接口“NjsHelloEvent”对象 function testImplements(){ var hevent = plus.android.implements( "io.dcloud.NjsHelloEvent", { "onEventInvoked":function( name ){ console.log( "Invoked Object’s name: "+name ); // 输出“Invoked Object’s name: Tester”

    uni-app使用plus注意事项

    importClass

    导入Java类对象

    ClassObject plus.android.importClass( String classname ); 导入类对象后,就可以通过.操作符直接调用对象(类对象/实例对象)的方法。 注意:导入类对象将会消耗较多的系统资源,通常不应该导入过多的类对象,可以使用plus.android.invoke()来调用未导入类实例对象的方法。
    • classname: String InstanceObject 必选 要导入的Java类名或者实例对象,使用"."分割命名空间

      在类名中可以使用"*"来导入指定命名空间下的所有类对象; 如果指定的类名无效,则导入类对象失败。 ClassObject Java类对象,如果导入类对象失败则返回null。 // 导入android.content.Intent类对象 function testImport(){ var Intent = plus.android.importClass("android.content.Intent"); // 导入后可以使用new方法创建类的实例对象 var intent=new Intent();

      uni-app使用plus注意事项

      invoke

      调用对象(类对象/实例对象)的方法

      Object plus.android.invoke( Object obj, String name, Object... args ); InstanceObject ClassObject String 必选 调用方法所属的对象,也可以是类的名称

      如果obj为实例对象(InstanceObject),则调用的是实例的方法; 如果obj为类对象(ClassObject),则调用的是类的静态方法; 如果obj为字符串类型,其值必须是类的名称,则调用的是类的静态方法;

    • name: String 必选 要调用的方法名称

      如果指定的方法名称不存在,则调用方法失败,不会抛出异常。

    • args: Object 可选 调用方法的参数

      如果指定的参数数目或类型不区配,则调用方法失败,不会抛出异常。 Object 调用方法的返回值,如果调用方法失败,则返回undefined。 // 调用native API弹出提示框 function testInvoke(){   // 由于Builder类是android.app.AlertDialog类的内部类,这里需要使用$符号分割   var dlg = plus.android.newObject("android.app.AlertDialog$Builder",mainActivity);   // 设置提示框标题   plus.android.invoke(dlg,"setTitle","自定义标题");   // 设置提示框内容   plus.android.invoke(dlg,"setMessage","使用NJS的原生弹出框,可自定义弹出框的标题、按钮");   // 设置提示框按钮   plus.android.invoke(dlg,"setPositiveButton","确定(或者其他字符)",null);   // 显示提示框   plus.android.invoke(dlg,"show");

      uni-app使用plus注意事项

      requestPermissions

      void plus.android.requestPermissions(Array[String] permissions, AndroidSuccessCallback successCb, AndroidErrorCallback errorCB); 向系统请求权限,Android系统6+版本(API等级23+),并且必须设置targetSdkVersion>=23,参考: https://ask.dcloud.net.cn/article/193 。 如果权限属于危险权限并且用户没有授权则会弹出系统提示框由用户授权确认,如果已经授权或被用户拒绝则返回结果。 授权结果在successCb回调参数中可获取。
    • permissions: Array [ String ] 可选 申请的权限列表

      权限列表参考Android官方列表 https://developer.android.com/reference/android/Manifest.permission (需翻墙)。 注意:要申请的权限需在应用manifest.json的“模块权限配置”中勾选(保存后提交云端打包)。

    • successCb: AndroidSuccessCallback 可选 申请权限成功回调函数

      返回申请权限的结果,可能被用户允许 回调函数的参数event包含以下属性:

    • granted - Array[String]字符串数组,已获取权限列表;
    • deniedPresent - Array[String]字符串数据,已拒绝(临时)的权限列表;
    • deniedAlways - Array[String]字符串数据,永久拒绝的权限列表。
    • errorCB: AndroidErrorCallback 可选 申请权限失败回调函数

      通常传入参数错误时触发此回调。 : 无

      示例:

      // 申请定位权限 function requestLocation(){ plus.android.requestPermissions(['android.permission.ACCESS_FINE_LOCATION'], function(e){ if(e.deniedAlways.length>0){ //权限被永久拒绝 // 弹出提示框解释为何需要定位权限,引导用户打开设置页面开启 console.log('Always Denied!!! '+e.deniedAlways.toString()); if(e.deniedPresent.length>0){ //权限被临时拒绝 // 弹出提示框解释为何需要定位权限,可再次调用plus.android.requestPermissions申请权限 console.log('Present Denied!!! '+e.deniedPresent.toString()); if(e.granted.length>0){ //权限被允许 //调用依赖获取定位权限的代码 console.log('Granted!!! '+e.granted.toString()); }, function(e){ console.log('Request Permissions error:'+JSON.stringify(e));

      uni-app使用plus注意事项

      runtimeMainActivity

      获取应用主Activity实例对象

      InstanceObject plus.android.runtimeMainActivity(); Android平台完整Java类名为android.app.Activity,完整API请参考Android开发文档 InstanceObject 程序原生Java层主Activity实例对象。 // 获取应用主Activity实例对象 function getMainActivity(){ var main = plus.android.runtimeMainActivity();

      uni-app使用plus注意事项

      autoCollection

      自动回收对象

      void plus.android.autoCollection(InstanceObject obj); 回收对象,设置自动回收原生对象(变量置空),应用在内存回收(GC)时自动释放对象占用的资源。 IntanceObject 必选 要回收的实例对象

      : 无

      示例:

      // 如Test类 function testAttribute(){ var Test = plus.android.importClass("io.dcloud.Test"); var test = new Test(); // 设置test对象自动回收 plus.android.autoCollection(test);

      uni-app使用plus注意事项

      ClassObject

      Java类对象

      interface ClassObject { // ... function Object plusGetAttribute( String name ); function Object plusSetAttribute( String name, Object value ); // ... Java类对象,可通过其属性获取类的常量,可通过方法来操作类的静态变量和方法,也通过new方法来创建类的实例对象。 对于类的常量,则直接通过.后面跟随常量名称调用即可。 plusGetAttribute : 获取Java类对象的静态属性
    • plusSetAttribute : 设置Java类对象的静态属性

      plusGetAttribute

      获取Java类对象的静态属性

      Object clsobj.plusGetAttribute( String name );
      • name: String 必选 要获取的静态属性名称

        如果指定的属性名称不存在,则返回null。

        Object : 静态属性实例对象

        示例:

        // 如Test类存在静态属性sName function testAttribute(){ var Test = plus.android.importClass("io.dcloud.Test"); // 获取io.dcloud.Test类的静态属性sName的值 var name = Test.plusGetAttribute("sName");

        uni-app使用plus注意事项

        plusSetAttribute

        设置Java类对象的静态属性

        void clsobj.plusSetAttribute( String name, Object value );
      • name: String 必选 要设置的静态属性名称

        如果指定的属性名称不存在,则操作不生效,不会抛出异常。

      • value: Object 必选 要设置的静态属性值

        如果指定的属性值类型不区配,则操作不生效,不会抛出异常。

        : 无

        示例:

        // 如Test类存在静态属性sName function testAttribute(){ var Test = plus.android.importClass("io.dcloud.Test"); // 设置io.dcloud.Test类的静态属性sName的值 Test.plusSetAttribute("sName","New name");

        uni-app使用plus注意事项

        InstanceObject

        Java实例对象

        interface InstanceObject { // ... function Object plusGetAttribute( String name ); function Object plusSetAttribute( String name, Object value ); // ... Java实例对象,可通过其方法来操作实例的变量和方法。 注意:必须通过plusGetAttribute()方法读取实例对象的属性值,通过plusSetAttribute()方法设置实例对象的属性值。 plusGetAttribute : 获取Java实例对象的属性
      • plusSetAttribute : 设置Java实例对象的属性

        plusGetAttribute

        获取Java实例对象的属性

        Object insobj.plusGetAttribute( String name );
        • name: String 必选 实例属性的名称

          如果指定的属性名称不存在,则返回null。

          Object : 属性的值

          示例:

          // 获取实例对象的属性 function testAttribute(){ // 获取手机内存信息 var Context = plus.android.importClass("android.content.Context"); var ActivityManager = plus.android.importClass("android.app.ActivityManager"); var mi = new ActivityManager.MemoryInfo(); var activityService = plus.android.runtimeMainActivity().getSystemService(Context.ACTIVITY_SERVICE); activityService.getMemoryInfo(mi); memoryInfo = mi.plusGetAttribute("availMem"); // 获取mi对象的availMem属性值

          uni-app使用plus注意事项

          plusSetAttribute

          设置Java实例对象的属性

          void insobj.plusSetAttribute( String name, Object value );
        • name: String 必选 要设置的属性名称

          如果指定的属性名称不存在,则操作不生效,不会抛出异常。

        • value: Object 必选 要设置的属性值

          如果指定的属性值类型不区配,则操作不生效,不会抛出异常。

          : 无

          示例:

          // 如Test类存在mCount属性 function testAttribute(){ var Test = plus.android.importClass("io.dcloud.Test"); var test = new Test(); // 设置test对象的count属性值 test.plusSetAttribute("mCount",10);

          uni-app使用plus注意事项

          AndroidSuccessCallback

          成功回调函数

          void onSuccess(event){ 不同接口触发的成功回调参数event包含的属性存在差异,具体参考对应的接口描述说明。
          • event: Object 必选 回调参数

            回调参数包含的属性由调用接口决定,具体参考对应的接口描述说明。 : 无

            AndroidErrorCallback

            错误回调函数

            function void onError(Exception error){ // Handle error var code = error.code; // 错误编码 var message = error.message; // 错误描述信息
            • error: Exception 必选 获取加速度操作的错误信息

              可通过error.code(Number类型)获取错误编码; 可通过error.message(String类型)获取错误描述信息。 京ICP备12046007号-5

  •