有没有什么简单的能用 js 开发安卓应用并能收发原生广播的东西么

2022-07-06 08:44:44 +08:00
 bthulu
    private static final String ACTION_CLAIM_SCANNER = "com.honeywell.aidc.action.ACTION_CLAIM_SCANNER";
    private static final String EXTRA_PROPERTIES = "com.honeywell.aidc.extra.EXTRA_PROPERTIES";

    @Override
    public void use() {
        // 指定扫码结果广播接收器的 ACTION 名称
        Bundle properties = new Bundle();
        properties.putBoolean("DPR_DATA_INTENT", true);
        properties.putString("DPR_DATA_INTENT_ACTION", ACTION_BARCODE_DATA);
        // 如需启用指定的 profile, 可 putExtra(EXTRA_PROFILE, "MyProfile1")
        Intent intent = new Intent(ACTION_CLAIM_SCANNER).putExtra(EXTRA_PROPERTIES, properties);
        context.sendBroadcast(intent);

        // 注册扫码结果广播接收器
        context.registerReceiver(receiver, new IntentFilter(ACTION_BARCODE_DATA));
    }

    private static final String ACTION_RELEASE_SCANNER = "com.honeywell.aidc.action.ACTION_RELEASE_SCANNER";

    @Override
    public void release() {
        listeners.clear();
        context.unregisterReceiver(receiver);
        context.sendBroadcast(new Intent(ACTION_RELEASE_SCANNER).setPackage("com.intermec.datacollectionservice"));
    }
3452 次点击
所在节点    程序员
31 条回复
yzkos
2022-07-06 08:52:42 +08:00
uniapp 可以用 js 开发安卓 APP ,不太了解你说的 [收发原生广播] 如果 uniapp 不支持,可以用原生开发个 [收发原生广播] 的插件,引入到 uniapp 里用 js 调用即可。
lbb2445
2022-07-06 08:53:24 +08:00
uniapp ,然后试着做安卓插件
ifdef
2022-07-06 08:53:38 +08:00
你 webview 不是要放在 activity/fragment 里吗,在广播的 onReceive 里 reload 一下不就传进 webview 里了?
b1iy
2022-07-06 09:02:12 +08:00
一般 PDA 都能设置结果返回方式,先找设置改改试试

广播就只能自定义 native 插件,native 保存 js callback 引用,间接实现广播
jswh
2022-07-06 09:03:02 +08:00
1. 混合开发有挺多方案的。uniapp ,react native ,Ionic ,也基本都支持原生插件。
2. webview 可以用 jsbridge 通信。
3. 按你的需求弄个小程序结构的程序框架蛮合适的。
lizhenda
2022-07-06 09:07:10 +08:00
专业的人做专业的事,钱多另说
nitmali
2022-07-06 09:11:02 +08:00
uniapp 可以
demo:

//获取 activity
const main = plus.android.runtimeMainActivity();
const IntentFilter = plus.android.importClass('android.content.IntentFilter');
const filter = new IntentFilter ();
// 监听广播
filter.addAction("你的广播")
const receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: function(context, intent) {
plus.android.importClass(intent)
// TODO 操作数据
console.log(JSON.stringify(intent))
}
})

// 注册监听
main.registerReceiver(receiver, filter);

// 关闭
// main.unregisterReceiver(receiver);
bthulu
2022-07-06 09:32:46 +08:00
@nitmali 感谢. 刚才试装了下 uniapp 官方 demo, 感觉卡顿还是比较严重, PDA 上的 cpu 是 MSM8916, 比手机上的性能差远了.
gzf6
2022-07-06 09:43:40 +08:00
Capacitor 或者 cordova ,按照他们的规范自己写插件也行
x13945
2022-07-06 09:44:01 +08:00
那就换 rn 吧,开发效率和前端有一拼
vone
2022-07-06 09:50:09 +08:00
Android PDA 的扫码器不都是模拟键盘的输入然后加一个回车键,扫码结果可以通过焦点状态的输入框接收到的,不用自己写接收逻辑。

而且就算是你们需要底层开发去支持扫码器,也应该是开发一个单独的应用去提供扫描和接收结果的功能,然后有需要的时候安装这个应用,由这个应用在需要时触发扫码,然后把扫描结果转发给焦点状态的输入框。
bthulu
2022-07-06 10:00:30 +08:00
@vone 你是没开发过工厂工人用的 app, 工人还给你去戳一下输入框激活焦点? 想都不用想. 工人只想按一下 PDA 上的物理扫码键然后就完事了. 再多点一下输入框, 工人要造反的.
lsyAndroid
2022-07-06 10:01:53 +08:00
走 jsbridge ,前端页面用 js 写,原生 app 侧接收 js 发送的数据,进行数据处理。
wenruoliushui
2022-07-06 10:02:05 +08:00
js 只能跟原生交互,离不开原生。
vone
2022-07-06 10:12:11 +08:00
@bthulu js 调用 input.focus() 获取一下焦点。
james2013
2022-07-06 10:16:35 +08:00
是不是你用 Android Studio 的方式不对呢?
使用 Android Studio 运行是使用 Run 按钮
点击 Run 按钮可以直接安装到设备上,你这种小的 app 估计只需要几秒就能装上
flytsuki
2022-07-06 10:17:06 +08:00
android 加 flutter 吧,比 webview 好用多了
bthulu
2022-07-06 10:21:56 +08:00
@james2013 哪这么快哦, 可能是我笔记本性能太差了吧, PDA 性能也不行吧, 神州本, i5-8300H, 实测至少 15 秒.
xiangyuecn
2022-07-06 10:38:01 +08:00
自己简单写一个 jsbridge 就行了,java+js 200 行撑死,网页界面页面可以直接复用桌面版的,微调一下改成移动版

别听什么 uniapp react flutter ,纯粹心智负担
FaiChou
2022-07-06 10:38:11 +08:00
autojs

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/864336

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX