android_socket_switch

Android基于Socket无线遥控(1)--Socket基本模型搭建 按计划每周更新一篇技术博文,上周因工作忙而中断,第三篇:《Android基于Socket无线遥控(1)--Socket基本模型搭建》     本例子内容比较多,初步构思分三篇完成,Android系统基于Socket实现无线遥控,可控制另一台Android设备音量增减、亮度调节、方向控制、确认、退出等,本篇主要介绍Socket基本模型搭建,以及无线控制Android系统音量增加,亮度增 阅读详情

1.activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="echo.cn.socket.MainActivity">

    <EditText
        android:id="@+id/addr"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="35dp"
        android:hint="请输入IP地址"/>

    <Button
        android:id="@+id/on"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/addr"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="35dp"
        android:text="ON" />

    <Button
        android:id="@+id/off"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/on"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="35dp"
        android:text="OFF" />

</RelativeLayout>
2.MainActivity.java

package echo.cn.socket;


import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private EditText addr;
    private Button on, off;
    private Socket socket;
    private PrintStream output;
    private boolean isLinked = false;
    /* 服务器端口 */
    private final int HOST_PORT = 9999;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        addr = (EditText) findViewById(R.id.addr);
        on = (Button) findViewById(R.id.on);
        off = (Button) findViewById(R.id.off);

        on.setOnClickListener(this);
        off.setOnClickListener(this);

        off.setEnabled(false);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.on:
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        if (!isLinked){
                            socket();
                        }
                        if (isLinked){
                            turnON();
                        }
                    }
                }).start();
                if (isLinked){
                    off.setEnabled(true);
                    on.setEnabled(false);
                }
                break;
            case R.id.off:
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        turnOFF();
                    }
                }).start();
                on.setEnabled(true);
                off.setEnabled(false);
                break;
            default:
                break;
        }
    }

    private void socket() {
        String ip = addr.getText().toString();
        Pattern pattern = Pattern.compile("^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$");
        Matcher matcher = pattern.matcher(ip);
        if(matcher.matches()){
            try {
                socket = new Socket(ip, HOST_PORT);
                output = new PrintStream(socket.getOutputStream(), true, "utf-8");
                isLinked = true;
            } catch (Exception e) {
                System.out.println("host exception: " + e.toString());
            }
        }
    }

    private void turnOFF() {
        output.print("off");
    }

    private void turnON() {
        output.print("on");
    }
}

3.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="echo.cn.socket">

    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>



不用NTAG215卡了!用旧手机+树莓派Zero搭建无线Amiibo模拟器(支持塞尔达) 本文介绍了一种创新的无线Amiibo模拟方案,利用闲置安卓手机和树莓派Zero替代传统的NTAG215卡片。通过将手机设置为蓝牙中继,解决了树莓派Zero蓝牙信号弱的问题,实现了与Switch的稳定无线连接。玩家可借此免费刷取《塞尔达传说》等游戏的Amiibo装备,享受高性价比的DIY乐趣。 阅读详情

相关推荐

安卓手机独立运行UI自动化测试:Termux+uiautomator2环境搭建与实战

UI自动化测试是移动应用质量保障的核心技术,其原理是通过脚本模拟用户操作,对应用界面进行功能性验证。这项技术能显著提升测试效率与覆盖率,尤其适用于回归测试与兼容性验证。在安卓平台,uiautomator2作为基于Python的流行框架,极大地简化了脚本开发。传统方案依赖电脑与ADB连接,限制了测试的灵活性与设备独立性。本文聚焦于解决这一痛点,深入探讨如何在安卓手机内部的Termux Linux环境中,配置uiautomator2与ADB服务,实现设备自洽的自动化测试。文章将详细解析ADB本地自连接、atx-

weixin_33858485的博客 377

ovn原理与实践

ovn原理和简单实践

NUCEMLS的博客 5651

RK3288 Android 7.1 音频调试踩坑记:用ES8323驱动搞定ES8388的耳机图标与喇叭切换

本文详细记录了在RK3288 Android 7.1平台上使用ES8323驱动调试ES8388音频编解码器的完整过程。从内核配置、DTS适配到耳机检测逻辑修正,再到Android系统事件上报机制的实现,解决了喇叭切换异常和耳机图标不显示的问题,为类似音频驱动调试提供了实用参考。

dfu65065的博客 397

sock_ntop()函数的实现

#include    "unp.h"   #ifdef  HAVE_SOCKADDR_DL_STRUCT #include    #endif   /* include sock_ntop */ char * sock_ntop(const struct sockaddr *sa, socklen_t salen) {  

神秘的少年 1862

安卓RAT逆向实战:从环境搭建到动态分析深度拆解AhMyth

远程访问木马(RAT)是移动安全领域常见的恶意软件类型,它通过在受控设备上建立隐蔽通道,实现远程监控与数据窃取。其核心原理在于利用系统权限与网络通信模块,在后台执行攻击者指令。理解RAT的工作机制对于构建有效的终端威胁检测与防御体系具有重要价值,尤其在安卓生态中,此类威胁常伪装成正常应用进行传播。在实战层面,逆向工程是剖析恶意软件内部逻辑的关键技术,通过静态分析与动态调试相结合,可以系统性地还原其攻击链。其中,Frida作为动态插桩框架,能够实时Hook关键函数调用,监控网络通信与数据流动;而网络抓包工具则

ckkay800264的博客 341

Socket 切换主机地址

Socket 切换主机地址

Hanyang Li的专栏 249

设置代理_Nintendo Switch代理设置方法

代理加速设置方法 Step1 点击设置Step2 进入互联网设置Step3 选择连接的网络Step4 进入更改设置Step5 输入试用或购买的代理账号Step6 保存设置Step7 重新连接Step8 连接成功套餐列表 3元 流量2G 有效期2天 解决游戏下载慢 6元 流量4G 有效期2天 解决游戏下载慢 8元 流量6G 有效期2天 解决游戏下载慢 10元 流量8G ...

weixin_34331737的博客 3万+

Sock工具,服务端和客户端

能够很好的显示收到的16进制信息。简单好用

switch和break的结合使用

int i = 3; switch (i) { case 1: System.out.println(1); break; case 2: System.out.println(2); break; case 3: System.out.println(3); break; default: System.out.println(0); } 如果没有break,代码会一直往下运行,直到碰到brea...

yituo7475的博客 786

Ubuntu环境下rknn-toolkit2的安装与兼容性解析

本文详细解析了在Ubuntu系统上安装瑞芯微rknn-toolkit2工具链的完整流程与关键注意事项。文章重点剖析了rknn-toolkit2与旧版rknn-toolkit的核心兼容性问题,强调两者在API、模型格式及运行时库上互不兼容,并推荐使用Conda虚拟环境进行隔离管理,为RK3566、RK3588等开发板的AI模型部署提供清晰的实践指南。

weixin_29041767的博客 373

HexView 脚本自动化工具:从刷写文件处理到批量转换实战

本文详细介绍了如何利用HexView脚本自动化工具高效处理嵌入式刷写文件。通过实战演示,文章展示了如何使用bat脚本实现S19、HEX等格式文件的剪切、填充、合并与批量转换,构建自动化流水线,从而显著提升汽车电子等领域的开发与生产效率。

weixin_29237635的博客 355

switch-case分支一定记得写break;

问题 发现自己写的代码逻辑总是不对,因为是socket通信,以及涉及到安卓异步消息处理机制,不会下断点调试。 原因 switch 语句 中 case:,相当于 入口指示牌, 若 不加break; 则 从 入口case 进入后,接着会依次通过所有后续 case 指示牌 和语句,直到 switch 语句 结束处。...

banzhihuanyu的博客 648

Materials - UE5中的PivotPainter

可以使用3DS Max Script中的脚本(Pivot Painter)对模型进行处理,让每个Element都有自己的Pivot Point,来方便控制和制作一些特殊的顶点动画效果;

GT的虚幻引擎文档 1288

android java.net,Android App - Java.Net.SocketException: No route to host

问题I'm creating an android app which streams video from a media server. I'm using a list view for my channels and a switch statement to control the videos. In the switch statement there are simple piec...

weixin_34911749的博客 256

算法策略 | MACD跨周期短线交易策略开发(股指+商品双版)

量化策略开发,高质量社群,交易思路分享等相关内容

松鼠宽客的博客 2538

安路TangDynasty和FD和JTAG驱动器安装

安路FPGA产品矩阵包含SALPHOENIX高性能、SALEAGLE高性价比和SALELF低功耗三大系列,广泛应用于网络通信、消费电子等领域。配套的TangDynasty(TD)集成开发环境支持标准设计输入,提供完整优化流程与调试工具。简要介绍了TD 6.2.1版本的安装步骤。

wangjie36的博客 1030

android tcp tcp阻塞 线程不运行,物联网综合练习之android TCP客户端

/*************************************************************************************************PROJECT:wifi遥控小车HARDWARE: STC89C52RC单机, L239D直流电机驱动器, ESP8266安信可wifi模块SOFTWARE: Eclipse安...

weixin_42319263的博客 323

挖矿病毒解决实例(隐藏进程,文章较好)(入侵)

CPU起飞了 最近有朋友在群里反馈,自己服务器的CPU一直处于高占用状态,但用top、ps等命令却一直找不到是哪个进程在占用,怀疑中了挖矿病毒,急的团团转。 根据经验,我赶紧让他看一下当前服务器的网络连接,看看有没有可疑连接,果然发现了有点东西: 上Shodan查一下这IP地址: 反向查找,发现有诸多域名曾经解析到这个IP地址: 这是一个位于德国的IP地址,开放了4444,5555,7777等数个特殊的服务端口: 其中这位朋友服务器上发现的连接到的是7777端口,

墨痕诉清风的博客 1万+

TCL移动通信面试题

面试中的几个问题,只记得这么几个了。虽然没过,以后继续努力。 1、Exception是类还是接口,实现的哪个接口,兄弟类是什么?异常的处理方式? 2、switch支持的类型是哪些,default可以放在case前面吗? 3、android的四大容器? 4、约瑟夫用java/c++实现方法? 5、socket通信原理? 6、线程怎么使用?使用哪个更好?为什么? 7、java集合有多少...

Kolter 382

simulink的Sine Wave 模块详解

模块是 Simulink 中的一个信号源模块,用于生成正弦波信号。该模块可以根据设定的幅值、频率、相位和偏移量,在仿真过程中产生周期性的正弦波形。模块都能提供强有力的支持。通过深入了解其参数的影响及结合 MATLAB 脚本的应用,读者可以更加有效地利用这一模块进行仿真和研究。此外,通过实际应用场景的扩展以及常见问题解答部分的帮助,能够更好地掌握。模块是一个非常实用的工具,适用于需要生成正弦波信号的各种场景。模块的参数,可以进一步增强学习体验。模块参数的影响,下面我们将详细探讨每个参数如何影响仿真结果。

xiaoheshang_123的博客 1052

把浮点数这件小事讲清楚:ABAP 7.51 里 Open SQL 与 ABAP CDS 的 FLTP 新玩法与避坑指南

ABAP浮点数计算的风险与应对 摘要:ABAP项目中的浮点数(FLTP)在跨平台计算时存在误差风险,同一逻辑在不同数据库平台可能产生细微差异。ABAP 7.51新增了两项关键能力:1)Open SQL和ABAP CDS中可为AVG函数指定结果类型,避免默认返回FLTP;2)ABAP CDS提供FLTP_TO_DEC转换函数。但需注意这些转换仍可能存在平台相关差异,且FLTP_TO_DEC会截断而非四舍五入小数位。开发者在涉及金额、数量等关键业务计算时,应明确数值语义并设计容错机制。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 213

基于WiFi模块的Android WiFi通信

通过一段时间的学习和应用,理解了Android通信,通过这篇文章记录一下学习过程。 基于ESP8266的Android WiFi通信广泛应用于物联网领域,常用是通过局域网实现Android端和下位机的通信,达到控制目的。 此篇文章记录的内容,需要手机连接到WiFi模块,通过wifi让Android端和硬件部分处于同一个局域网内。Android网络通信通过socket编程实现网络的连接,通过IO...

北风 2万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

3步掌握Strato:在Android设备上运行Switch游戏的实战指南

Strato是一个开源的Nintendo Switch模拟器项目,专为Android设备设计,让开发者和技术爱好者能够在移动设备上体验Switch自制软件和游戏。通过创新的架构设计和优化,Strato实现了在ARM设备上运行Switch应用的突破,为移动游戏开发者和模拟器爱好者提供了全新的技术探索平台。 ## 🚀 快速启动:从源码到可运行实例 ### 环境准备与项目构建 Strato基于A

gitblog_00831的博客 457

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

yuzu Switch模拟器:免费畅玩Switch游戏的完整指南

yuzu 是一款开源免费的任天堂 Switch 模拟器,用 C++ 编写,支持 Windows、Linux 和 Android 三大平台。它把 Switch 的 CPU、GPU、音频、输入整套系统搬进软件里重新实现,让你不用主机就能玩 Switch 游戏。适合想重温掌机经典的人,也适合想拆一拆模拟器怎么工作的人。跟着下面的步骤,你可以完成安装、跑通第一款游戏,并把它调到自己硬件的最优状态。 ##

gitblog_00617的博客 389

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Android 7系统日志(五)日志读取—logcat源码深度分析

Android logcat 参数原理与源码分析(基于 Android 7) 摘要: 本文从源码角度解析 logcat 各参数的工作原理。Android 7 的 logcat 实现为单个 C++ 文件(logcat.cpp),约 2000 行代码。主要内容包括: 参数解析流程:-b 选择缓冲区(main/radio/events等),-v 设置输出格式(brief/threadtime等),-c/-g 控制命令 过滤机制:通过 TAG:LEVEL 语法构建过滤器链表,如"MyTag:D"表示仅显示该标签 D

AfinalStone的专栏 268

yuzu Switch模拟器上手实战:从零安装到流畅运行的完整教程

你一定遇到过这样的场景:好不容易下载了一个 Switch 模拟器,双击打开却弹出一串看不懂的报错;或者第一次进游戏,画面卡在"编译着色器"的进度条上半天不动,你以为电脑坏了。别急,这些问题几乎每个 yuzu 新手都踩过。**yuzu 是目前最流行的开源任天堂 Switch 模拟器**,由 Citra(3DS 模拟器)原班团队用 C++ 打造,横跨 Windows、Linux、Android 三大平

gitblog_01026的博客 442
上一篇: iOS_socket_switch
下一篇: css清理浮动
echo008
博客等级 码龄10年 16粉丝 38原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值