批发行业进销存-webview 读取NFC,会员卡 源码CyberWinApp-SAAS 本地化及未来之窗行业应用跨平台架构

一、混合应用开发

混合应用顾名思义就是网页html和原生APP共同作用的结果

好处在一既有web的跨平台优势(安卓、苹果,电脑、国产电脑、平板电脑,自助机都能用)

好处二可以离线使用,比较稳定

好处三可以与本地硬件交互

二、web调用本地资源

web调用本地交互采用jsapi

代码示例

public WebView cwpd_Web;

   java未来之窗内部插件 csp = new java未来之窗内部插件d(main_instance);

 webview.addJavascriptInterface(new 未来之窗交互(this, this), "未来之窗交互名称"); 

js调用方式

未来之窗交互名称.读取酒店门锁(酒店门锁厂家)

三、android调用web

android 一般不知道当前web情况,一般采用2中方式

1.web不断轮询查询检测结果

缺点:消耗web资源,优点,技术要求低

2.采用webview内部通知机制

优点:不消耗内部资源,缺点:需要了解系统底层

四、webview调用NFC

权限

javascript 复制代码
    <uses-permission android:name="android.permission.NFC" />
    <uses-feature android:name="android.hardware.nfc" />

nfc 资源库

java 复制代码
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.MifareClassic;
import android.nfc.tech.MifareUltralight;
import android.nfc.tech.NfcA;

nfc 服务

java 复制代码
  private NfcAdapter NFC_mAdapter2023;
    private NdefMessage mNdefPushMessage;
    private PendingIntent mPendingIntent;

nfc 服务启动

java 复制代码
    resolveIntent(getIntent());
            NFC_mAdapter2023 = NfcAdapter.getDefaultAdapter(this);
            //初始化NfcAdapter
            LogToFile.d_windows("nfc","nfc调式记录","初始化NfcAdapter");
            if (NFC_mAdapter2023 == null) {
               // showMessage("无设备", "没有NFC设备");
               // finish();
               // return;
            }else {
                LogToFile.d_windows("nfc","nfc调式记录","NFC正常");
                //初始化PendingIntent
                mPendingIntent = PendingIntent.getActivity(this, 0,
                        new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

               // mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()), 0);

                LogToFile.d_windows("nfc","nfc调式记录","初始化PendingIntent");

                mNdefPushMessage = new NdefMessage(new NdefRecord[]{
                        newTextRecord(
                         "Message from NFC Reader :-)", Locale.ENGLISH, true)}
                        );
            }

android宿主

java 复制代码
  protected void onResume() {
   
        if (NFC_mAdapter2023 != null) {
            if (!NFC_mAdapter2023.isEnabled()) {
                showWirelessSettingsDialog();
            }
            NFC_mAdapter2023.enableForegroundDispatch(this, mPendingIntent, null, null);
            NFC_mAdapter2023.enableForegroundNdefPush(this, mNdefPushMessage);
        }
    }

五、android 检测NFC并通知web html

java 复制代码
 private void resolveIntent(Intent intent) {
        String action = intent.getAction();
        if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)
                || NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)
                || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
            Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
            NdefMessage[] msgs;
            if (rawMsgs != null) {
                msgs = new NdefMessage[rawMsgs.length];
                for (int i = 0; i < rawMsgs.length; i++) {
                    msgs[i] = (NdefMessage) rawMsgs[i];
                }
            } else {
                // Unknown tag type
                byte[] empty = new byte[0];
                byte[] id = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
                Tag tag = (Tag) intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

                String 未来之窗NFC=dumpTagData(tag);
               // LogToFile.d_windows();
                LogToFile.d_windows("nfc","nfc调式记录",未来之窗NFC);
              
                String 未来之窗反向js2 = "javascript:" + "未来之窗人工智能交互" + "(\"nfc_reader\",`" + 未来之窗NFC + "`)";
/*
                webview.evaluateJavascript(未来之窗反向js, new ValueCallback<String>() {
                            @Override
                            public void onReceiveValue(String value) {
                               // LogUtil.e(TAG, "getPayId onReceiveValue " + functionName);
                            }
                        }
                         );
*/
                cwpd_Web.evaluateJavascript(未来之窗反向js2, new ValueCallback<String>() {
                            @Override
                            public void onReceiveValue(String value) {
                                // LogUtil.e(TAG, "getPayId onReceiveValue " + functionName);
                            }
                        }
                );
                byte[] payload = 未来之窗NFC.getBytes();
                NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN, empty, id, payload);
                NdefMessage msg = new NdefMessage(new NdefRecord[] { record });
                msgs = new NdefMessage[] { msg };
               // mTags.add(tag);
            }
            // Setup the views
           // buildTagViews(msgs);
        }
    }

六、web接受端

javascript 复制代码
function cyberWin_Device_AIOT_Monitor(action,param){
	// alert("类型:"+action);
	//  alert(param);

	  var 未来之窗json = eval("("+param+")");//转换为json对象
	  // alert(未来之窗json.id_dec);
	  

 

	  
	  

}

到此设备上刷卡web就会通知

相关推荐
Jouzzy6 小时前
【Android安全】Ubuntu 16.04安装GDB和GEF
android·ubuntu·gdb
极客先躯7 小时前
java和kotlin 可以同时运行吗
android·java·开发语言·kotlin·同时运行
Good_tea_h9 小时前
Android中的单例模式
android·单例模式
计算机源码社14 小时前
分享一个基于微信小程序的居家养老服务小程序 养老服务预约安卓app uniapp(源码、调试、LW、开题、PPT)
android·微信小程序·uni-app·毕业设计项目·毕业设计源码·计算机课程设计·计算机毕业设计开题
丶白泽14 小时前
重修设计模式-结构型-门面模式
android
晨春计16 小时前
【git】
android·linux·git
标标大人17 小时前
c语言中的局部跳转以及全局跳转
android·c语言·开发语言
竹林海中敲代码17 小时前
Qt安卓开发连接手机调试(红米K60为例)
android·qt·智能手机
木鬼与槐18 小时前
MySQL高阶1783-大满贯数量
android·数据库·mysql
iofomo18 小时前
【Abyss】Android 平台应用级系统调用拦截框架
android·开发工具·移动端