因为我的主攻语言是javscript,对于之前来说,js还仅仅只在浏览器层面大放异彩,如今js在人工智能方面有tensorflow.js,在后端或者中间层方面有node.js,更不用说app,小程序了,甚至出现一套代码运行在5端,当然业界称其为web app,通俗解释就是在app里嵌套了画布(canvas),画布里嵌套了一个网页,对于java来说,它构建的native app是可以获取手机所有功能的,但是web app仅限于可以在显示方面与native app媲美,例子有闲鱼,京东都是web app,但是在操作系统api来说,web app差了很多,所以人们在此基础上开发出类java的js库,比如react native,native.js,因为我本人是学vue出身(顺便吐槽一下vue2.0还没学会,3.0就出了),所以我决定使用一下native.js(缺点在于社区不够好,案例少,所以我还是推荐使用react native)
此文章就是记录一下操作手机的api代码,也不准备深入学习,因为其实就是将java转化为js,本质还是java的思想。
1.读取手机的系统照片
plus.io.resolveLocalFileSystemURL("/storage/emulated/0/DCIM", function(entry) {
console.log("Request file system successful");
console.log(entry.isDirectory)
entry.getDirectory("Camera", {
create: false,
exclusive: false
}, function(dir) {
console.log("Directory Entry Name: " + dir.name);
var directoryReader = dir.createReader();
directoryReader.readEntries(function(entries) {
var i;
for (i = 0; i < entries.length; i++) {
console.log(entries[i].name);
}
}, function(e) {
console.log("Read entries failed: " + e.message);
});
}, function() {
console.log(e.message);
});
}, function(e) {
console.log("Request file system failed: " + e.message);
});
其实按照这个思路是可以读取所有照片的,因为已经达到的手机的底层,直接遍历所有文件夹查询其中的jpg,png,gif文件就可以,但是耗时过长所以我就没写,直接获取了相机拍照储存的默认相册,由于没跟后端结合,其实既然知道了每个图片在手机的地址,就可以上传并压缩到数据库储存。
2.读取手机的所有短信
var Context = plus.android.runtimeMainActivity();
var res = plus.android.invoke("android.support.v4.app.ActivityCompat", "checkSelfPermission", Context,
"android.permission.READ_SMS");
var PERMISSIONS_STORAGE = new Array();
PERMISSIONS_STORAGE.push("android.permission.READ_SMS");
if (res != "0") {
plus.android.invoke("android.support.v4.app.ActivityCompat", "requestPermissions", Context, PERMISSIONS_STORAGE, 1);
} else {
var main = plus.android.runtimeMainActivity();
var Uri = plus.android.importClass("android.net.Uri");
var ContactsContract = plus.android.importClass('android.provider.ContactsContract');
var uri = Uri.parse("content://sms/");
var cr = main.getContentResolver();
plus.android.importClass(cr);
var cur = cr.query(uri, null, null, null, null);
plus.android.importClass(cur);
cur.moveToFirst();
while (cur.moveToNext()) {
var index_Address = cur.getColumnIndex("address");
var address = cur.getString(index_Address);
/*短信内容*/
var index_Body = cur.getColumnIndex("body");
var body = cur.getString(index_Body);
/*类型1接收 2发送*/
var index_Type = cur.getColumnIndex("type");
var type = cur.getString(index_Type);
console.log(address, body, type);
}
cur.close();
}
没什么好说的,java也是可以做到同样的地步,提示一下针对不同机型获取短信的程度不同,但是还是可以获取大部分短信。
3.获取通话记录
var CallLog = plus.android.importClass("android.provider.CallLog");
var main = plus.android.runtimeMainActivity();
var obj = main.getContentResolver();
plus.android.importClass(obj);
var cursor = obj.query(
CallLog.Calls.CONTENT_URI,
null,
null,
null,
null
);
plus.android.importClass(cursor);
var content = [];
var count = 0;
if (cursor.moveToFirst()) {
while (cursor.moveToNext()) {
count++;
var number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
var type;
switch (
parseInt(cursor.getString(cursor.getColumnIndex(CallLog.Calls.TYPE))))
{
case CallLog.Calls.INCOMING_TYPE:
type = "呼入";
break;
case CallLog.Calls.OUTGOING_TYPE:
type = "呼出";
break;
case CallLog.Calls.MISSED_TYPE:
type = "未接";
break;
default:
type = "挂断";
break;
}
var date = new Date(parseInt(
cursor.getString(cursor.getColumnIndexOrThrow(CallLog.Calls.DATE))));
var Name_Col = cursor.getColumnIndexOrThrow(CallLog.Calls.CACHED_NAME);
var name = cursor.getString(Name_Col);
var numberLocation = cursor.getString(
cursor.getColumnIndex(CallLog.Calls.GEOCODED_LOCATION)
);
var Duration_Col = cursor.getColumnIndexOrThrow(CallLog.Calls.DURATION);
var duration = cursor.getString(Duration_Col);
content.push({
name: name,
mobile: number,
numberLocation: numberLocation,
callTime: new Date().getTime(date),
talkTime: duration,
type: type
});
if (count > 50) {
break;
}
}
}
console.log(JSON.stringify(content));
4.获取通讯录
plus.contacts.getAddressBook(plus.contacts.ADDRESSBOOK_PHONE, function(addressbook) {
addressbook.find(null, function(contacts) {
var username = new Array();
if (contacts.length > 0) { /*获取当前通讯录里面所有人*/
for (var i = 0; i < contacts.length; i++) {
if (contacts[i].phoneNumbers[0]) {
username.push(contacts[i].displayName + "-" + contacts[i].phoneNumbers[0].value);
}
}
}
console.log(username)
}, function(e) {
alert("Find contact error: " + e.message);
});
}, function(e) {
});
5.静默拍照(用户不知情的情况下拍照)
只有这个我没有成功,可能是缺乏java知识的原因,但是好像java可以很轻松实现相关功能,只能把这个悬念留给以后的自己了
下面是无法成功调用的代码
var IntentMana = plus.android.importClass('android.content.Intent');
var MediaMana = plus.android.importClass('android.provider.MediaStore');
var App = plus.android.runtimeMainActivity();
var Uri = plus.android.importClass('android.net.Uri');
var intent = new IntentMana(MediaMana.ACTION_IMAGE_CAPTURE);
var ret = App.startActivityForResult(intent, 1000);
写这些代码的目的就是想看看app可以干多少坏事,也给自己敲了个警钟,原生app能做的远远比这个还多(其实我也尝试了批量删除手机所有文件,但是没有手机可以尝试就没运行)
Comments | NOTHING