获取应用主Activity实例对象,什么是Activity (活动)?
Android的四大组件之一的Activity(活动):Activity是一个应用程序的组件,他在屏幕上提供了一个区域,允许用户在上面做一些交互性的操作, 比如打电话,照相,发送邮件,或者显示一个地图!Activity可以理解成一个绘制用户界面的窗口, 而这个窗口可以填满整个屏幕,也可能比屏幕小或者浮动在其他窗口的上方!
作用:
安卓四大组件:Activity、Service、BroadcastReceiver、ContentProvider
相关文档:https://www.runoob.com/w3cnote/android-tutorial-activity.html
Context 按照英文字面意思就是"上下文",它位于位于framework package的android.content.Context中,其实该类为LONG型,类似于句柄。
很多方法需要通过 Context才能识别调用者的实例。
那Context到底是什么呢?
一个Activity就是一个Context,一个Service也是一个Context。
Android程序员把“场景”抽象为Context类,他们认为用户和操作系统的每一次交互都是一个场景.
比如打电话、发短信,这些都是一个有界面的场景.还有一些没有界面的场景,比如后台运行的服务(Service)。
一个应用程序可以认为是一个工作环境,用户在这个环境中会切换到不同的场景,这就像一个前台秘书,她可能需要接待客人,可能要打印文件,还可能要接听客户电话,而这些就称之为不同的场景,前台秘书可以称之为一个应用程序。
相关文章:https://www.jianshu.com/p/4baf231e7084、https://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg
TelephonyManager,见名知义:用于管理手机通话状态,获取电话信息(设备信息、sim卡信息以及 网络信息),侦听电话状态(呼叫状态服务状态、信号强度状态等)以及可以调用电话拨号器拨打电话!
相关文档:https://www.runoob.com/w3cnote/android-tutorial-intent-base.html
官方入门指南:https://ask.dcloud.net.cn/article/88
使用Native.js 的过程中,也需要和Java一样先声明引入一个类,才能使用这个类,在Native.js中使用importClass
方法去引入一个类
/* Android平台导入Intent类 */
var Intent = plus.android.importClass("android.content.Intent");
/* 创建Intent的实例对象 */
var intent = new Intent();
获取实例对象后,可以通过实例对象“.”操作符获取对象的常量属性、调用对象的成员方法,实例对象的非常量属性则需通过plusGetAttribute、plusSetAttribute方法操作。
plus.android.newObject
用于不导入类,直接创建一个实例对象,相比导入类对象后使用new操作符创建对象效率要高。
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,应用激活时是作为弹窗出现的。不声明这个权限,在设置列表是看不到这个应用的。
获取悬浮窗权限,让应用可以从后台弹出到前台。
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) /* 转跳到悬浮窗设置 */
}
常用的一些native.js代码:https://ask.dcloud.net.cn/article/114
安卓分区存储注意事项:https://ask.dcloud.net.cn/article/36199#io
一般手机都会限制应用后台运行(后台几分钟后断网、息屏断网等等),需要手动修改应用的后台运行为无限制。
目前native.js是不支持继承,应该避免使用继承来实现,可以将对象示例化调用来避免继承(多数情况下是可以避免的)。对于重写暂时是没有办法实现(毕竟java本身不是动态语言),可以使用Interface来解决部分问题。上述两类问题确实会限制native.js的能力
plus.device.setWakelock(true);//保持程序唤醒
wakelock是一种锁的机制,只要有应用拿着这个锁,CPU就无法进入休眠状态,一直处于工作状态。
Android为了确保应用程序中关键代码的正确执行,提供了Wake Lock的API,使得应用程序有权限通过代码阻止AP进入休眠状态。但如果不领会Android设计者的意图而滥用Wake Lock API,为了自身程序在后台的正常工作而长时间阻止AP进入休眠状态,就会成为待机电池杀手。
通知分为重要、不重要等级别,已经是否可以悬浮,是否可以通知声音。
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
官方文档:https://ask.dcloud.net.cn/article/114
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();
let context=plus.android.runtimeMainActivity().getApplicationContext();
context.getFilesDir().getPath(); //当前应用的文件目录
context.getFilesDir().getCacheDir(); //当前应用的临时文件目录
let environment = plus.android.importClass("android.os.Environment");
var sdRoot = environment.getExternalStorageDirectory(); //文件夹根目录
机中短信数据库相关字段包括:
读取短信内容的uri为:
Uri uri = Uri.parse(“content://sms”); //读取所有短信
Uri uri = Uri.parse(“content://sms/inbox”); //读取收件箱短信
uts,全称 uni type script,是一门跨平台的、高性能的、强类型的现代编程语言。
它可以被编译为不同平台的编程语言,如:
uts 采用了与 ts 基本一致的语法规范,支持绝大部分 ES6 API。
开发指南:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html