Native.js记录

  1. plus.runtimeMainActivity 获取应用主Activity实例对象,什么是Activity (活动)?

Android的四大组件之一的Activity(活动):Activity是一个应用程序的组件,他在屏幕上提供了一个区域,允许用户在上面做一些交互性的操作, 比如打电话,照相,发送邮件,或者显示一个地图!Activity可以理解成一个绘制用户界面的窗口, 而这个窗口可以填满整个屏幕,也可能比屏幕小或者浮动在其他窗口的上方!

作用:

Activity用于显示用户界面,用户通过Activity交互完成相关操作  一个App允许有多个Activity。

安卓四大组件:Activity、Service、BroadcastReceiver、ContentProvider

2.android.content.Context类 Context 按照英文字面意思就是“上下文”,它位于位于framework package的android.content.Context中,其实该类为LONG型,类似于句柄。

很多方法需要通过 Context才能识别调用者的实例。

那Context到底是什么呢?

一个Activity就是一个Context,一个Service也是一个Context。

Android程序员把“场景”抽象为Context类,他们认为用户和操作系统的每一次交互都是一个场景.

比如打电话、发短信,这些都是一个有界面的场景.还有一些没有界面的场景,比如后台运行的服务(Service)。

一个应用程序可以认为是一个工作环境,用户在这个环境中会切换到不同的场景,这就像一个前台秘书,她可能需要接待客人,可能要打印文件,还可能要接听客户电话,而这些就称之为不同的场景,前台秘书可以称之为一个应用程序。

3.TelephonyManager (电话管理器) TelephonyManager,见名知义:用于管理手机通话状态,获取电话信息(设备信息、sim卡信息以及 网络信息),侦听电话状态(呼叫状态服务状态、信号强度状态等)以及可以调用电话拨号器拨打电话!

4.四大组件间的 枢纽——Intent(意图),Android通信的桥梁 Native.js 入门指南 importClass /* Android平台导入Intent类 / var Intent = plus.android.importClass(“android.content.Intent”);
/
创建Intent的实例对象 */ var intent = new Intent();

获取实例对象后,可以通过实例对象“.”操作符获取对象的常量属性、调用对象的成员方法,实例对象的非常量属性则需通过plusGetAttribute、plusSetAttribute方法操作。

plus.android.newObject

用于不导入类,直接创建一个实例对象,相比导入类对象后使用new操作符创建对象效率要高。

Native.js代码记录 1.APP从后台移动到前台 APP从后台移动到前台,相关代码。需要配置权限:REORDER_TASKS(官方是这么说的,但是这个权限好像没啥用)

/引入ActivityManager对象/ plus.android.importClass(“android.app.ActivityManager”); /获取上下文/ let Context = plus.android.importClass(“android.content.Context”); /获取ActivityManager对象/ let am = plus.android.runtimeMainActivity().getSystemService(Context.ACTIVITY_SERVICE); /获取应有的Activity对象/ let main = plus.android.runtimeMainActivity(); /获取正在运行的task/ let a = am.getRunningTasks(3); /获取应用的task,并移动到最前面/ am.moveTaskToFront(main.getTaskId(), 0);

主要是要声明这个权限android.permission.SYSTEM_ALERT_WINDOW,应用激活时是作为弹窗出现的。不声明这个权限,在设置列表是看不到这个应用的。

2.获取悬浮窗权限 获取悬浮窗权限,让应用可以从后台弹出到前台。

let main = plus.android.runtimeMainActivity() let pkName = main.getPackageName() let Settings = plus.android.importClass(‘android.provider.Settings’) let Uri = plus.android.importClass(‘android.net.Uri’) let Intent = plus.android.importClass(‘android.content.Intent’) let intent = new Intent(‘android.settings.action.MANAGE_OVERLAY_PERMISSION’, Uri.parse(‘package:’ + pkName)) /判断是否获取了权限/ if (!Settings.canDrawOverlays(main)) {

main.startActivityForResult(intent, 5004) /* 转跳到悬浮窗设置 */

}

3.打开应用权限设置界面 let main = plus.android.runtimeMainActivity() let pkName = main.getPackageName() let Settings = plus.android.importClass(‘android.provider.Settings’) let Uri = plus.android.importClass(‘android.net.Uri’) let Intent = plus.android.importClass(‘android.content.Intent’) let intent = new Intent(

Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.parse('package:' + pkName)

) try {

main.startActivity(intent) // 转跳到悬浮窗设置

} catch (e) {

console.log(e)

} 问题记录 1.起步 一般手机都会限制应用后台运行(后台几分钟后断网、息屏断网等等),需要手动修改应用的后台运行为无限制。

目前native.js是不支持继承,应该避免使用继承来实现,可以将对象示例化调用来避免继承(多数情况下是可以避免的)。对于重写暂时是没有办法实现(毕竟java本身不是动态语言),可以使用Interface来解决部分问题。上述两类问题确实会限制native.js的能力

plus.device.setWakelock(true);//保持程序唤醒

wakelock是一种锁的机制,只要有应用拿着这个锁,CPU就无法进入休眠状态,一直处于工作状态。

Android为了确保应用程序中关键代码的正确执行,提供了Wake Lock的API,使得应用程序有权限通过代码阻止AP进入休眠状态。但如果不领会Android设计者的意图而滥用Wake Lock API,为了自身程序在后台的正常工作而长时间阻止AP进入休眠状态,就会成为待机电池杀手。

2.通知推送 通知分为重要、不重要等级别,已经是否可以悬浮,是否可以通知声音。

通话状态监听 1.查阅的文档 https://developer.android.com/reference/android/telephony/PhoneStateListener https://developer.android.com/reference/android/telephony/TelephonyCallback.CallStateListener https://developer.android.com/reference/android/telephony/TelephonyManager#registerTelephonyCallback(java.util.concurrent.Executor,%20android.telephony.TelephonyCallback) https://developer.android.com/reference/java/util/concurrent/Executor

安卓权限

android.permission.SYSTEM_ALERT_WINDOW,悬浮窗权限,显示系统窗口。 android.permission.REORDER_TASKS,重新排序系统Z轴运行中的任务。 android.permission.RECORD_AUDIO,录制声音通过手机或耳机的麦克。 android.permission.CALL_PHONE,允许程序从非系统拨号器里输入电话号码 android.permission.CAMERA,允许访问摄像头进行拍照 android.permission.WAKE_LOCK ,允许程序在手机屏幕关闭后后台进程仍然运行 android.permission.MODIFY_AUDIO_SETTINGS,修改声音设置信息 android.permission.WRITE_EXTERNAL_STORAGE,允许程序写入外部存储,如SD卡上写文件 android.permission.WRITE_SETTINGS,允许读写系统设置项 android.permission.READ_PHONE_STATE,允许读取手机通话状态 android.permission.READ_CALL_LOG,允许读取通话记录(uniapp只有正式的安装包才能获取) android.permission.WRITE_CALL_LOG,允许修改通话记录 android.permission.READ_CONTACTS,允许读取通讯录

代码记录

  1. 获取通话状态 plus.android.importClass(“android.telephony.TelephonyManager”); let Context = plus.android.importClass(“android.content.Context”); let TelephonyManager = plus.android.runtimeMainActivity().getSystemService(Context.TELEPHONY_SERVICE); let code = TelephonyManager.getCallState();

2.获取Context类 let context=plus.android.runtimeMainActivity().getApplicationContext(); context.getFilesDir().getPath(); //当前应用的文件目录 context.getFilesDir().getCacheDir(); //当前应用的临时文件目录

3.Environment类 let environment = plus.android.importClass(“android.os.Environment”); var sdRoot = environment.getExternalStorageDirectory(); //文件夹根目录

读取短信 1.ContentResolver 机中短信数据库相关字段包括:

_id:短信序号,如100 address:发件人地址,即手机号,如+8613811810000,这里需要注意的是手机号是否加+86,可以加上86和不加86分别测试下 person:发件人,如果发件人在通讯录中则为具体姓名,陌生人为null date:日期,long型,如1256539465022,可以对日期显示格式进行设置,这里在用sqlite语句进行筛选时date字段单位是毫秒 protocol:协议0SMS_RPOTO短信,1MMS_PROTO彩信 read:是否阅读0未读,1已读 status:短信状态-1接收,0complete,64pending,128failed type:短信类型1是接收到的,2是已发出 body:短信具体内容

读取短信内容的uri为:

Uri uri = Uri.parse(“content://sms”); //读取所有短信 Uri uri = Uri.parse(“content://sms/inbox”); //读取收件箱短信 2022-11-06 1.uts uts,全称 uni type script,是一门跨平台的、高性能的、强类型的现代编程语言。

它可以被编译为不同平台的编程语言,如:

web平台,编译为JavaScript Android平台,编译为Kotlin iOS平台,编译为Swift(HX 3.6.7+ 版本支持)

uts 采用了与 ts 基本一致的语法规范,支持绝大部分 ES6 API。

2.问题记录

scss文件在App.vue内引入无效(未设置scope),单个组件内引入有效,原因未知; uniapp 不支持* css选择器。小程序不支持标签选择器; 小程序内因为生命周期的原因,会出现provide和inject无法使用的情况 nvue页面内的webview不能使用html5plus的接口。

3.uniapp内使用plus uniapp组件内通过plus接口创建webview时,必须使用如下代码,不然不会显示:

wv = plus.webview.create(“https://nicen.cn", ”app“, {

plusrequire: "none",
'uni-app': 'none',
height: uni.getSystemInfoSync().windowHeight - uni.getSystemInfoSync().statusBarHeight,
top: uni.getSystemInfoSync().statusBarHeight

}) var currentWebview = this.\(scope.\)getAppWebview(); currentWebview.append(wv);

4.拦截网址 拦截指定网址,不加载:

/* 拦截第三方地址 */ wv.overrideUrlLoading({

mode: 'allow',
match: '.*ww8k.com/.*',

}, (e) => {

console.log(e.url);

});

5.nvue nvue内webview加载的页面不能使用plus对象,只能通过postMessage和app端进行通讯。

6.plus.globalEvent plus.globalEvent.addEventListener(‘plusMessage’,()=>{});

阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。