经典蓝牙双机控制 APP-完整版1
经典蓝牙双机控制 APP-完整版1第一步创建总开关最重要文件app/src/main/java/com/bt/BuildConfig.javapackagecom.bt;/** * 条件编译开关 * true 服务端被控端 · 被控制的手机 * false 客户端控制端 · 主控手机 */publicclassBuildConfig{// 只改这里 publicstaticfinalbooleanSERVER_MODEfalse;}第二步完整工程所有文件全部复制粘贴1. 项目根文件settings.gradlepluginManagement { repositories { google() mavenCentral() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() } } rootProject.name BtRemoteControl include :appbuild.gradle项目级plugins { id com.android.application version 8.2.2 apply false }gradle.propertiesandroid.useAndroidXtrue android.nonTransitiveRClasstrue org.gradle.jvmargs-Xmx2048m2. app 模块文件app/build.gradleplugins { id com.android.application } android { namespace com.bt compileSdk 34 defaultConfig { applicationId com.bt.remote minSdk 26 targetSdk 34 versionCode 1 versionName 1.0 } buildTypes { release { minifyEnabled false } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { implementation androidx.appcompat:appcompat:1.6.1 implementation com.google.android.material:material:1.11.0 }app/proguard-rules.pro-keep class com.bt.** {*;}3. 清单文件自动识别服务/客户端app/src/main/AndroidManifest.xml?xml version1.0 encodingutf-8?manifestxmlns:androidhttp://schemas.android.com/apk/res/androiduses-permissionandroid:nameandroid.permission.BLUETOOTH/uses-permissionandroid:nameandroid.permission.BLUETOOTH_ADMIN/uses-permissionandroid:nameandroid.permission.BLUETOOTH_SCAN/uses-permissionandroid:nameandroid.permission.BLUETOOTH_CONNECT/uses-permissionandroid:nameandroid.permission.ACCESS_FINE_LOCATION/uses-permissionandroid:nameandroid.permission.RECEIVE_BOOT_COMPLETED/uses-permissionandroid:nameandroid.permission.FOREGROUND_SERVICE/uses-permissionandroid:nameandroid.permission.CHANGE_WIFI_STATE/uses-permissionandroid:nameandroid.permission.WRITE_SETTINGS/uses-permissionandroid:nameandroid.permission.SYSTEM_ALERT_WINDOW/applicationandroid:allowBackuptrueandroid:label蓝牙远程控制android:persistenttrueandroid:themestyle/Theme.AppCompatactivityandroid:name.MainActivityandroid:exportedtrueintent-filteractionandroid:nameandroid.intent.action.MAIN/categoryandroid:nameandroid.intent.category.LAUNCHER//intent-filter/activity!-- 客户端 --activityandroid:name.client.BluetoothScanActivity/activityandroid:name.client.ControlActivity/!-- 服务端 --activityandroid:name.server.TargetActivity/serviceandroid:name.server.AccessibilityControlServiceandroid:permissionandroid.permission.BIND_ACCESSIBILITY_SERVICEintent-filteractionandroid:nameandroid.accessibilityservice.AccessibilityService//intent-filtermeta-dataandroid:nameandroid.accessibilityserviceandroid:resourcexml/accessibility_config//serviceserviceandroid:name.server.ScreenCaptureService/serviceandroid:name.server.KeepAliveService/receiverandroid:name.server.BootReceiverandroid:exportedtrueintent-filteractionandroid:nameandroid.intent.action.BOOT_COMPLETED//intent-filter/receiver/application/manifest第三步完整 Java 代码全部齐全我把共用、客户端、服务端一次性全部给你【共用】Protocol.javapackagecom.bt;publicclassProtocol{publicstaticfinalbyteTOUCH0x01;publicstaticfinalbyteSYSTEM_CMD0x02;publicstaticfinalbyteSCREEN_DATA0x03;publicstaticfinalbyteHEARTBEAT0x04;publicstaticfinalbyteSYS_VOL_UP1;publicstaticfinalbyteSYS_VOL_DOWN2;publicstaticfinalbyteSYS_BRIGHT_UP3;publicstaticfinalbyteSYS_BRIGHT_DOWN4;publicstaticfinalbyteSYS_WIFI_TOGGLE5;publicstaticfinalbyteSYS_BT_TOGGLE6;publicstaticbyte[]encodeTouch(intaction,intx,inty){returnnewbyte[]{TOUCH,(byte)action,(byte)(x8),(byte)(x0xFF),(byte)(y8),(byte)(y0xFF)};}publicstaticbyte[]encodeSystemCmd(bytecmd){returnnewbyte[]{SYSTEM_CMD,cmd};}}【共用】BluetoothManager.javapackagecom.bt;importandroid.bluetooth.*;importjava.io.*;importjava.util.UUID;publicclassBluetoothManager{publicstaticfinalUUIDSPP_UUIDUUID.fromString(00001101-0000-1000-8000-00805F9B34FB);privatestaticBluetoothSocketsocket;privatestaticInputStreamin;privatestaticOutputStreamout;privatestaticStringtargetMac;// 服务端publicstaticvoidstartServer(){newThread(()-{try{BluetoothServerSocketssBluetoothAdapter.getDefaultAdapter().listenUsingRfcommWithServiceRecord(SPP,SPP_UUID);socketss.accept();insocket.getInputStream();outsocket.getOutputStream();startHeartBeat();}catch(Exceptione){}}).start();}// 客户端publicstaticvoidconnect(Stringmac){targetMacmac;newThread(()-{try{BluetoothDevicedBluetoothAdapter.getDefaultAdapter().getRemoteDevice(mac);socketd.createRfcommSocketToServiceRecord(SPP_UUID);socket.connect();insocket.getInputStream();outsocket.getOutputStream();startHeartBeat();}catch(Exceptione){}}).start();}privatestaticvoidstartHeartBeat(){newThread(()-{while(true){try{send(newbyte[]{Protocol.HEARTBEAT});Thread.sleep(3000);}catch(Exceptione){reconnect();}}}).start();}publicstaticvoidreconnect(){try{Thread.sleep(1000);if(targetMac!null)connect(targetMac);}catch(Exceptionignored){}}publicstaticvoidsend(byte[]data){newThread(()-{try{if(out!null)out.write(data);}catch(Exceptionignored){}}).start();}publicstaticInputStreamgetInputStream(){returnin;}}【主入口】MainActivity.javapackagecom.bt;importandroid.content.Intent;importandroid.os.Bundle;importandroid.widget.TextView;importandroidx.appcompat.app.AppCompatActivity;publicclassMainActivityextendsAppCompatActivity{OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextViewtvfindViewById(R.id.tv_mode);if(BuildConfig.SERVER_MODE){tv.setText(模式被控端服务端);startActivity(newIntent(this,com.bt.server.TargetActivity.class));}else{tv.setText(模式控制端客户端);startActivity(newIntent(this,com.bt.client.BluetoothScanActivity.class));}finish();}}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2448796.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!