uni-app Native.js示例汇总

发布于 1周前 作者 phonegap100 来自 Uni-App

uni-app Native.js示例汇总
Native.js虽然强大和开放,但很多web开发者因为不熟悉原生API而难以独立完成。 这篇帖子的目的就是汇总各种写好的NJS代码,方便web开发者。 众人拾柴火焰高,有能力的开发者多多提交NJS代码,大家都会给你点赞的,我们也会为每位共享NJS代码的朋友送上200积分。

Native.js在涉及js层和原生层频繁交互时会有性能问题,js和原生的数据类型也无法全部拉齐。但Native.js是5+app和uni-app通用。如果仅是uni-app,其实推荐更强大的uts,详见

Android平台

监听手机锁屏,解锁,开屏

链接

直接拨打电话

链接

将程序切换到后台

链接

强制弹出软键盘

链接

获取安卓设备device.uuid

链接

获取内存及CPU信息

链接

开启关闭蓝牙

链接

监听蓝牙开关状态

链接

获取蓝牙设备列表

链接

蓝牙连接票据打印机完整代码

链接

NFC数据读取

链接

截屏

链接

获取MAC地址

链接

获取设备当前网速

链接

打开网络设置

链接

打开各种系统设置界面

链接

获取WIFI列表

链接

调用系统控件播放视频

链接

调用os通讯录选择控件

链接

原生日历提醒插入

链接

AlarmManager闹钟定时任务

链接

调用系统控件裁剪图片

链接

复制内容到系统粘贴板

链接

调用讯飞的文字转语音功能(TTS)

链接

调用其它Activity后通过startActivityForResult获取返回结果

链接

接收系统广播消息,如监听安装卸载apk的事件

链接

判断app是否安装

链接

以监听手机飞行模式开关为例说明如何使用Native.js进行BroadcastReceiver广播

链接

常驻Android通知栏,不用个推实现本地消息推送(Local Notification)

链接

调用原生的socket连接

链接

启动一个原生service

链接

基于native.js的文件系统管理功能实现

链接

打开闪光灯

链接

停止、开启个推推送功能

var pushManager = plus.android.importClass("com.igexin.sdk.PushManager");  
var context = plus.android.runtimeMainActivity();  
function enable() {  
    pushManager.getInstance().turnOnPush(context);  
}  

function disable() {  
    pushManager.getInstance().turnOffPush(context);  
}

利用native.js获取手机gps是否开启

链接

通过native.js设置系统墙纸

链接

监听短信验证码

链接

遍历短信内容

链接

限制手机录像时间

链接

Android监听电话呼入呼出

链接

Android6以上动态权限申请

链接

通知栏下载进度条

链接

打开应用市场

链接

检查手机是否被root

链接

iOS平台

跳转系统设置页面

var UIApplication = plus.ios.import("UIApplication");  
var application2 = UIApplication.sharedApplication();  
var NSURL2 = plus.ios.import("NSURL");  
var setting2 = NSURL2.URLWithString("app-settings:");  
application2.openURL(setting2);  

plus.ios.deleteObject(setting2);  
plus.ios.deleteObject(NSURL2);  
plus.ios.deleteObject(application2);

如何判断系统功能权限是否开启(比如定位、推送)及提示用户开启权限

链接

获取包名

var NSBundle = plus.ios.importClass('NSBundle');  
var bundle = NSBundle.mainBundle();  
console.log(bundle.bundleIdentifier());  
plus.ios.deleteObject(bundle);

获取设备名

链接

测试是否安装某应用

链接

调用iOS打印API

链接

通过native.js登入game center

见Hello H5+里Native.js部分演示及源码。 或在这里搜索“game center”,链接

设置获取内容到系统粘贴板

链接

打开页面默认弹出键盘

链接

播放提示音

链接

调用ios的文字转语音(TTS)

链接

把base64数据保存为图片

链接

设置webview滑动减速度

var webview = plus.ios.currentWebview();  
var scrollView = webview.plusGetAttribute("scrollView");  
scrollView.plusSetAttribute("decelerationRate:",0.99);

打开应用市场

链接

ios获取系统的时区id

var NSTimeZone = plus.ios.importClass("NSTimeZone");  
var sys = NSTimeZone.systemTimeZone();  
console.log(sys.plusGetAttribute("name"));

状态栏显示网络请求雪花

var UIApplication = plus.ios.import("UIApplication");  
var sharedApplication = UIApplication.sharedApplication();  
sharedApplication.setNetworkActivityIndicatorVisible(true);  
plus.ios.deleteObject(sharedApplication);

获取GPS授权状态

var CLLocationManager = plus.ios.import("CLLocationManager");  
var authorizationStatus = CLLocationManager.authorizationStatus();  
switch(authorizationStatus) {  
      case 0:  
      /// User has not yet made a choice with regards to this application  
      break;  
      case 1:  
      // This application is not authorized to use location services.  Due  
    // to active restrictions on location services, the user cannot change  
    // this status, and may not have personally denied authorization  
      break;  
      case 2:  
        // User has explicitly denied authorization for this application, or  
    // location services are disabled in Settings.  
      break;  
      case 3:  
        // User has granted authorization to use their location at any time,  
    // including monitoring for regions, visits, or significant location changes.  
      break;  
      case 4:  
       // User has granted authorization to use their location only when your app  
    // is visible to them (it will be made visible to them if you continue to  
    // receive location updates while in the background).  Authorization to use  
    // launch APIs has not been granted.  
      break;  
      case 5:  
     // This value is deprecated, but was equivalent to the new -Always value.  
      break;  
      defalut:  
      break;  
}

获取手机存储空间

var BundleClass = plus.ios.importClass("NSBundle");  
var BundleObj = BundleClass.mainBundle();  
var filenamagerobj = plus.ios.newObject("NSFileManager");  
var FileAttr = plus.ios.invoke(filenamagerobj,"attributesOfFileSystemForPath:error:",BundleObj.bundlePath(),null);  
// NSFileSystemFreeSize 参数获取剩余空间  
// NSFileSystemSize  获取手机总存储空间  
var freeSpace = plus.ios.invoke(FileAttr,"objectForKey:","NSFileSystemFreeSize");  
var numberFormatterObj = plus.ios.newObject("NSNumberFormatter");  
var FreeSpaceStr = plus.ios.invoke(numberFormatterObj,"stringFromNumber:",freeSpace);  
var freeSpace = FreeSpaceStr / 1024/1024/1024;

打开/关闭手机的闪光灯

function turnonLight(isOn) {  
    if(plus.os.name == "iOS") {  
        var avcaptClass = plus.ios.importClass("AVCaptureDevice");  
        if(avcaptClass) {  
            var device = avcaptClass.defaultDeviceWithMediaType("vide");  
            plus.ios.invoke(device, "lockForConfiguration:", null);  
            if(isOn) {  
                plus.ios.invoke(device, "setTorchMode:", 1);  
                plus.ios.invoke(device, "setFlashMode:", 1);  
            } else {  
                plus.ios.invoke(device, "setTorchMode:", 0);  
                plus.ios.invoke(device, "setFlashMode:", 0);  
            }  
            plus.ios.invoke(device, "unlockForConfiguration");  
        }  
    }  
};

显示应用内的ViewController

// NewViewController为应用内创建的原生的ViewController类名,所调用页面的内容需要在原生代码中完成  
var newVCobj = plus.ios.newObject("NewViewController");  
var UIApplicationClass = plus.ios.importClass("UIApplication");  
var UIAppObj = UIApplicationClass.sharedApplication();  
var del = plus.ios.invoke(UIAppObj,"delegate");  
// 如果当前应用delegate对象包含UIWindow对象并且变量名命名为“window”可以这么写,  
// 否则需要根据实际代码情况修改  
// 应用的delegate对象也可以添加一个返回UIViewController的方法  
var appWindowObj = plus.ios.invoke(del,"window");  
var appRootController = plus.ios.invoke(appWindowObj,"rootViewController");  
plus.ios.invoke(appRootController,"presentViewController:animated:completion:",newVCobj,"YES",null);

看完这些例子,是不是觉得JS特别强大? 赶快拿去用起来吧!


1 回复

在uni-app中,Native.js 提供了一种在原生层面执行 JavaScript 代码的能力,允许开发者直接调用原生 API,增强应用的性能和功能。以下是一些常见的 Native.js 使用示例,涵盖了文件操作、网络通信、设备信息等场景。

示例 1:文件操作

// 读取文件内容
plus.io.resolveLocalFileSystemURL('_www/test.txt', function(entry) {
    entry.file(function(file) {
        var reader = new plus.io.FileReader();
        reader.onloadend = function(e) {
            console.log('文件内容: ' + e.target.result);
        };
        reader.readAsText(file);
    }, function(e) {
        console.error('获取文件失败: ' + e.message);
    });
}, function(e) {
    console.error('解析文件URL失败: ' + e.message);
});

示例 2:网络通信

// 发起GET请求
plus.net.request({
    url: 'https://api.example.com/data',
    method: 'GET',
    success: function(e) {
        var data = JSON.parse(e.text);
        console.log('请求成功: ', data);
    },
    fail: function(e) {
        console.error('请求失败: ' + e.message);
    }
});

示例 3:获取设备信息

// 获取设备信息
var info = plus.device.getInfo();
console.log('设备型号: ' + info.model);
console.log('系统版本: ' + info.version);
console.log('屏幕宽度: ' + info.screenWidth);
console.log('屏幕高度: ' + info.screenHeight);

示例 4:振动设备

// 振动设备
plus.device.vibrate(500); // 振动500毫秒

示例 5:扫描二维码

// 调用原生扫码功能
plus.scanner.scan({
    filters: ['qrCode'], // 指定扫描类型
    success: function(e) {
        console.log('扫描结果: ' + e.text);
    },
    fail: function(e) {
        console.error('扫描失败: ' + e.message);
    }
});

注意事项

  • 使用 Native.js 时,需确保在 manifest.json 中已启用 5+ App 扩展 API 权限。
  • 由于 Native.js 调用的是原生 API,因此代码执行效率较高,但也需要注意不同平台的兼容性问题。
  • 在进行网络通信时,注意处理好异步回调,避免阻塞主线程。
  • 使用文件操作时,务必处理好文件路径和权限问题,以免引发安全或权限错误。

上述示例展示了如何在 uni-app 中利用 Native.js 进行原生层面的操作,希望对你有所帮助。

回到顶部