首页 文章 精选 留言 我的

精选列表

搜索[通信],共10001篇文章
优秀的个人博客,低调大师

RXTX for JAVA 串口通信

RXTX 的下载可以到官网或者Fizzed,官网发现并没有64位的支持,但是在Fizzed中找到的2.2版的64,32的windows和Linux版本 http://fizzed.com/oss/rxtx-for-java 1.windows下的串口调试 将rxtxParallel.dll、rxtxSerial.dll拷贝到%JAVA_HOME%安装目录bin目录下 将rxtxParallel.dll、rxtxSerial.dll拷贝到%JAVA_HOME%安装目录jre/bin目录下(eclipse开发时调用,减少麻烦) 将RXTXcomm.jar 拷贝到%JAVA_HOME%\jre\lib\ext\RXTXcomm.jar(开发时直接导入) 2.Linux下的串口调试 首先确定Linux处理器型号,对应选择RXTX的Linux版本。 如处理器为i386,则将Linux i686版本中的两个os文件复制到系统%JAVA_HOME%/jre/lib/i386(即JDK目录中的系统文件夹) 将RXTXcomm.jar拷贝到%JAVA_HOME%/jre/lib/ext文件夹 代码不变,即可运行使用。 在实际开发中,由于使用树莓派测试,树莓派使用Raspbian系统(使用uname -a命令可查看系统内核信息) Linux raspberrypi 3.12.28+ #709 PREEMPT Mon Sep 8 15:28:00 BST 2014 armv6l GNU/Linux 处理器型号armv6l,在下载的RXTX工具包中并无此种系统版本,在实际测试中,所找到的RXTX工具包也都不能使程序运行,均报出系统位数不符。 又找到另一种处理方法,可直接在系统中make编译RXTX源码安装 最新的RXTX稳定版本是rxtx 2.1-7r2。首先用wget获取源码包并解压 cd /tmp wget http://rxtx.qbang.org/pub/rxtx/rxtx-2.1-7r2.zip unzip rxtx-2.1-7r2.zip 如果直接MAKE编译安装,可能会遇到以下两种错误: 错误1:/tmp/rxtx-2.1-7r2/./src/I2CImp.c:135: error: ‘UTS_RELEASE’ undeclared (first use in this function) 这是由于version.h中缺少’UTS_RELEASE’信息,需要手工添加。先获取当前系统的版本信息: uname -r 然后在/usr/include/Linux/version.h中添加 #define UTS_RELEASE "3.10.24+" 3.10.24+为上一步中获得的版本号 错误2:libtool: install: armv6l-unknown-linux-gnu/librxtxRS485.la’ is not a directory 这个错误会出现在JDK1.6及以上的运行环境下,需要对configure文件进行修改。在configure文件中找到 1.2*|1.3*|1.4*|1.5* 这一行,在后边添加上当前JDK的版本号即可,如 1.2*|1.3*|1.4*|1.5*|1.6*|1.7*|1.8* 完成以上两项修改后,就可以正常编译安装了。如果看到 Libraries have been installed in:/usr/lib/jvm/jdk-7-Oracle-armhf/jre/lib/arm 则说明RXTX安装已经成功。 之后执行 ./configure make make install 注意:可能会有权限不足的情况,需要chmod 777 test.c操作 至此使用RXTX框架的串口编程代码就可以在树莓派使用了。 (这里需要注意的是,在Linux系统中,大部分的串口名称为/dev/ttyS*,但再特殊环境下如本次使用的raspberrypi,使用RXTX方法获得串口集合是不成功的,原因是RXTX本身源码问题,找了好久的原因,终于在RXTX官网上找到了解释: Please note that on Ubuntu 11.04, the Arduino Uno and possibly others are recognised as /dev/ttyACMxx . The RXTX library only searches through /dev/ttySxx, so you need to make symlinks if your distro does the same, so for example ln -s /dev/ttyACM0 /dev/ttyS00 . 即RXTX本身支持的Linux串口搜索只限制为/dev/ttyS*等,其他名称的并不能支持,而raspberrypi中的串口名称为/dev/ttyACM*,故无法找到系统串口。这种情况下有两种解决方案: 1.修改源码:参考官网故障排除http://rxtx.qbang.org/wiki/index.php/Trouble_shooting(中间部分) 源码RXTXCommDriver.java文件中518行开始,为Linux系统环境下的串口名称查找,添加所需串口名即可(如ttyACM)(此种方法需要重新编译安装) 2.将串口文件进行映射,即使用命令 ln -s /dev/ttyACM0 /dev/ttyS00,即可找到/dev/ttyS00映射串口,也就对应了/dev/ttyACM0实际串口。

优秀的个人博客,低调大师

组件通信Intent(IntentDemo)

Intent是一个动作的完整描述,包含了动作的产生组件、接收组件和传递的数据信息。 Intent可以将一个组件的数据和动作传递给另一个组件 Intent为Activity、Service、BroadcaseReceiver等组件提供交互能力。Intent的一个最觉的用途就是启动Activity和Service,另一个用途是在Android系统上发布广播消息,广播消息可以是接收到特定数据或消息,也可以是手机的信号变化或电池的电量过低等信息。 Intent启动方式为:显式启动和隐式启动 1.显式启动: Intent intent = new Intent(DemoActivity.this,OtherActivity.class); startActivity(intent); 2.隐式启动: Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.google.com")); startActivity(intent); 在设置控件的宽度和高度的时候有三个值分别是: 1.fill_parent 2.wrap_content 3.match_parent 其中,match_parent是2.2版本以后推出的,原因是为了解决fill_parent的难以理解,官方建议以后用:match_parent 打电话: Intent intent = new Intent(); intent.setAction(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:110")); startActivity(intent); 打电话得在全局文件里加局权:<uses-permission android:name="android.permission.CALL_PHONE"/>...吼吼,不然不行 发送短信跟拨打电话差不多: Intent intent = new Intent(); intent.putExtra("sms_body","要发送短信的内容!"); intent.setAction(Intent.ACTION_SENTTO); intent.setData(Uri.parse("smsto:15895899925")); startActivity(intent); 发短信得在全局文件里加局权:<uses-permission android:name="android.permission.SEND_SMS"/>...吼吼,不然也不行 要求第二个Activity返回一个结果给第一个Activity时: 1.startActivityForResult(intent,此处需要一个整数);还需要实现一个startActivityResult()方法。 2.在第二个Activity中的Intent中:setIntent(要返回的结果整型,intent); 3.调用finish();它会调用startActivityResult()方法。 以下图片看不完整的,可以点击之后看大图 整数作用:做判断,成功后执行其它方法咯。 eclipse小巧门:按Ctrl+Shift+X可以快速切换所需内容为大写哦。。O_O 本文转自华华世界 51CTO博客,原文链接:http://blog.51cto.com/mzh3344258/733358 ,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android 蓝牙通信——AndroidBluetoothManager

转载请说明出处! 作者:kqw攻城狮 出处:个人站 | CSDN To get a Git project into your build: Step 1. Add the JitPack repository to your build file Add it in your root build.gradle at the end of repositories: allprojects { repositories { ... maven { url 'https://jitpack.io' } } } Step 2. Add the dependency dependencies { compile 'com.github.kongqw:AndroidBluetoothManager:1.0.0' } AndroidBluetoothManager 效果图 PNG GIF 基础功能 添加权限 <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 初始化 mBluetoothManager = new BluetoothManager(); 打开蓝牙 mBluetoothManager.openBluetooth(); 关闭蓝牙 mBluetoothManager.closeBluetooth(); 添加蓝牙开关状态的监听 mBluetoothManager.setOnBluetoothStateListener(this); /** * 正在关闭蓝牙的回调 */ @Override public void onBluetoothStateTurningOff() { // TODO } /** * 蓝牙关闭的回调 */ @Override public void onBluetoothStateOff() { // TODO } /** * 正在打开蓝牙的回调 */ @Override public void onBluetoothStateTurningOn() { // TODO } /** * 蓝牙打开的回调 */ @Override public void onBluetoothStateOn() { // TODO } 移除蓝牙开关状态的监听 mBluetoothManager.removeOnBluetoothStateListener(); 设置蓝牙可见 startActivity(mBluetoothManager.getDurationIntent(0)); 获取蓝牙名称 mBluetoothManager.getName() 修改蓝牙名称 mBluetoothManager.setName(newName); 扫描附近的蓝牙设备 mBluetoothManager.discovery(); 添加扫描蓝牙设备的监听 mBluetoothManager.setOnDiscoveryDeviceListener(this); /** * 开始扫描附近蓝牙设备的回调 */ @Override public void onDiscoveryDeviceStarted() { // TODO } /** * 扫描到附近蓝牙设备的回调 * * @param device 蓝牙设备 */ @Override public void onDiscoveryDeviceFound(BluetoothDevice device) { // TODO } /** * 扫描附近蓝牙设备完成的回调 */ @Override public void onDiscoveryDeviceFinished() { // TODO } 移除扫描蓝牙设备的监听 mBluetoothManager.removeOnDiscoveryDeviceListener(); 服务端 初始化 mBluetoothService = new BluetoothService() { @Override protected UUID onSecureUuid() { // TODO 设置自己的UUID return UUID_SECURE; } @Override protected UUID onInsecureUuid() { // TODO 设置自己的UUID return UUID_INSECURE; } }; 等待客户端连接 mBluetoothService.start(); 断开连接/释放资源 mBluetoothService.stop(); 添加蓝牙连接的监听 mBluetoothService.setOnServiceConnectListener(new OnServiceConnectListener() { @Override public void onConnectListening() { // TODO } @Override public void onConnectSuccess(BluetoothDevice device) { // TODO } @Override public void onConnectFail(Exception e) { // TODO } @Override public void onConnectLost(Exception e) { // TODO } }); 发送消息 mBluetoothService.send(chatText); 添加消息收发的监听 mBluetoothClient.setOnMessageListener(this); /** * 蓝牙发送了消息 * * @param message 发送的消息 */ @Override public void onSend(String message) { // TODO } /** * 蓝牙接收到消息 * * @param message 接收的消息 */ @Override public void onRead(String message) { // TODO } 客户端 初始化 mBluetoothClient = new BluetoothClient() { @Override protected UUID onSecureUuid() { // TODO 设置自己的UUID return UUID_SECURE; } @Override protected UUID onInsecureUuid() { // TODO 设置自己的UUID return UUID_INSECURE; } }; 蓝牙连接(安全) mBluetoothClient.connect(mBluetoothDevice, true); 蓝牙连接(不安全) mBluetoothClient.connect(mBluetoothDevice, false); 断开连接/释放资源 mBluetoothClient.stop(); 添加蓝牙连接的监听 mBluetoothClient.setOnClientConnectListener(new OnClientConnectListener() { @Override public void onConnecting() { // TODO } @Override public void onConnectSuccess(BluetoothDevice device) { // TODO } @Override public void onConnectFail(Exception e) { // TODO } @Override public void onConnectLost(Exception e) { // TODO } }); 发送消息 mBluetoothClient.send(chatText); 添加消息收发的监听 mBluetoothClient.setOnMessageListener(this); /** * 蓝牙发送了消息 * * @param message 发送的消息 */ @Override public void onSend(String message) { // TODO } /** * 蓝牙接收到消息 * * @param message 接收的消息 */ @Override public void onRead(String message) { // TODO }

优秀的个人博客,低调大师

Flutter与Android通信方式->EventChannel方式(单项通信,不返回结果)

摘要:Flutter版本号:1.12.13,Kotlin版本号:1.3.72 版本号不同,实现的方式不一样,所以特此标注下。 具体的实现原理,自行查阅。这里只写代码实现过程,主要原因是网上Kotlin的实现方式实在太少,特此记录。 Flutter: import 'package:base_library/base_library.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; class ChannelDemoPage extends StatefulWidget { @override _ChannelDemoPageState createState() => _ChannelDemoPageState(); } class _ChannelDemoPageState extends State<ChannelDemoPage> { static const _channel = const MethodChannel('plugins.flutter.io/FlutterMessagePlugin'); static const eventChannel = EventChannel('plugins.flutter.io/FlutterEventPlugin'); @override void initState() { super.initState(); eventChannel.receiveBroadcastStream().listen(_onEvent, onError: _onError); } void _onEvent(Object event) { LogUtil.e("Flutter收到Android发来的消息-> " + event.toString()); } void _onError(Object error) { LogUtil.e("错误:" + error.toString()); } @override Widget build(BuildContext context) { return new Scaffold( body: new Row(), floatingActionButtonLocation: FloatingActionButtonLocation.endFloat, floatingActionButton: new FloatingActionButton( backgroundColor: Colors.blueAccent, onPressed: () { this.getResult(); }, child: new Icon(Icons.adb), ), ); } void getResult() async { try { Map<String, Object> map = {"shareUrl": "https://www.baidu.com"}; var result = await _channel.invokeMethod("getRealUrl", map); LogUtil.e("result->$result"); } catch (e) { LogUtil.e("e->, $e"); } } } Kotlin: import android.content.Context import android.util.Log import io.flutter.embedding.engine.plugins.FlutterPlugin import io.flutter.plugin.common.EventChannel class FlutterEventPlugin : FlutterPlugin, EventChannel.StreamHandler { private var channelName = "plugins.flutter.io/FlutterEventPlugin"; companion object { private var eventChannel: EventChannel? = null private var eventSink: EventChannel.EventSink? = null private var context: Context? = null fun sendContent(content:String) { eventSink?.success(content); } } override fun onListen(arguments: Any?, events: EventChannel.EventSink?) { eventSink = events } override fun onCancel(arguments: Any?) { eventSink = null } override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) { eventChannel = EventChannel(binding.binaryMessenger, channelName) eventChannel!!.setStreamHandler(this) context = binding.applicationContext } override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { eventChannel = null eventChannel!!.setStreamHandler(null) } } import androidx.annotation.NonNull; import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugins.GeneratedPluginRegistrant class MainActivity: FlutterActivity () { override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { flutterEngine.getPlugins().add(FlutterMessagePlugin()); flutterEngine.getPlugins().add(FlutterEventPlugin()); GeneratedPluginRegistrant.registerWith(flutterEngine); } } 显示结果: I/flutter (19362): common_utils e 初始化完成->plugins.flutter.io/FlutterEventPlugin I/flutter (19362): common_utils e result->处理完成 I/flutter (19362): common_utils e Flutter收到Android发来的消息-> Android发送消息到Flutter

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册