思路:
1、js调用android的java代码
2、通过java代码访问通讯录
3、通过java代码访问js代码返回通讯录信息
代码:
1、js调用android的java代码
js代码:
window.ncp.callOnJs2("click")android代码,通过webview打开页面:
mWebview.getSettings().setJavaScriptEnabled(true)mWebView.addJavascriptInterface(new JavaScriptInterface(), "ncp")
final class JavaScriptInterface {
public int callOnJs() {
return 1000
}
public void callOnJs2(String mode) {
//TODO
}
}
2、通过java代码访问通讯录
/**得到手机通讯录联系人信息**/private void getPhoneContacts() {
ContentResolver resolver = mContext.getContentResolver()
// 获取手机联系人
Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,PHONES_PROJECTION, null, null, null)
if (phoneCursor != null) {
while (phoneCursor.moveToNext()) {
//得到手机号码
String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX)
//当手机号码为空的或者为空字段 跳过当前循环
if (TextUtils.isEmpty(phoneNumber))
continue
//得到联系人名称
String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX)
//得到联系人ID
Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID_INDEX)
//得到联系人头像ID
Long photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX)
//得到联系人头像Bitamp
Bitmap contactPhoto = null
//photoid 大于0 表示联系人有头像 如果没有给此人设置头像则给他一个默认的
if(photoid > 0 ) {
Uri uri =ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,contactid)
InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(resolver, uri)
contactPhoto = BitmapFactory.decodeStream(input)
}else {
contactPhoto = BitmapFactory.decodeResource(getResources(), R.drawable.contact_photo)
}
mContactsName.add(contactName)
mContactsNumber.add(phoneNumber)
mContactsPhonto.add(contactPhoto)
}
phoneCursor.close()
}
3、通过java代码访问js代码返回通讯录信息
mWebView.loadUrl("javascript:onSaveCallback()")js只能当作用户前端,除非你弄node.js ,在这里不考虑具体就是js获取输入的手机号和内容,然后判断输入是否准确,比如手机号位数和短信字数
用js给提交按钮绑定事件进行ajax post数据传输给后台,或者直接用submit按钮进行表单提交。
后台获取数据后,通过某些端口与运营商通讯,然后发送短信。
你单纯一个服务器肯定没法发短信啊,还要有硬件,就要去移动啦电信啦联通啦买一些服务,调用他们的服务发送。
当然你买个发送短信的硬件插服务器上也行,不一定稳定,也不一定合法。。。
在H5页面的开发中,肯定会遇到获取手机的型号等需求,使用js的navigator对象,能获取到有关浏览器的相关信息,但想获取手机使用的系统等更多内容还是有局限性的。
在网上搜到一个好用的获取手机型号和系统的插件 mobile-detect.js
2.引用mobile-detect.js
实例化一个MobileDetect
在浏览器中使用三星模拟器测试可以打印安卓型号 5.0:
使用iphone打印iphone型号ios11:
这个还是不能准确定位使用的是什么型号的手机,但可以通过返回的信息判断使用的是安卓还是苹果的,比如苹果结合获取设备屏幕大小和io系统的型号就可以判断出使用的是什么iphone手机,至于安卓手机类型比较多,就要复杂很多啦,大家知道的可以相互分享啊。