1.Xamarin.Forms连接阿里云MySQL实现登录及数据采集等功能的简单AndroidDemo(一)
2.Androidå¼åä¹èçï¼Bluetoothï¼
3.å¦ä½è°è¯Android Framework
4.android studioä¸New Moduleçå 个类åçåºå«
Xamarin.Forms连接阿里云MySQL实现登录及数据采集等功能的简单AndroidDemo(一)
在最近一个实验性质的项目中,BOSS需要开发一个Android APP运行在PDA上,以供现场人员进行数据采集。作为.NET开发人员,我选择了Xamarin.Forms进行跨平台开发,借此机会学习并分享经验,修仙养成源码希望大家可以共同交流。
在实现项目需求前,我购买并配置了阿里云MySQL数据库。在进行数据库配置时,记得保存连接名、账号和密码,以便后续使用。为了进行数据库连接,我使用了Navicat for mysql工具,深渊网源码按照配置进行连接并创建表,这里不再详细说明基础SQL操作。
在使用Xamarin.Forms进行开发时,首先在VS中创建新项目。在搜索框中输入“Xamarin”后,可以看到多个选项,其中“Xamarin.Forms”适合创建Android和iOS应用程序,老熊猫 源码“Xamarin.Android”专门用于创建Android应用程序,而“Xamarin.iOS”则适用于iOS应用程序。考虑到全面性和通用性,我选择了“Xamarin.Forms”。创建空白模板后,模板自带了许多页面和依赖,对于新手而言,中国风 源码这可能显得有些复杂。不过,我们也可以在后续开发中自行创建所需的页面。
在开发计划中,我选择仅针对Android进行开发,因为使用Xamarin.Forms进行开发的用户通常是为了构建Android应用。尽管我有Mac系统并安装了XCode,818捕鱼源码但考虑到性能和效率,原生开发可能更加适合。在实际操作中,使用Xamarin.Forms进行Android开发仍然是一个不错的选择,尤其是在需要跨平台开发时。
创建空白模板后,大部分开发工作集中在“DEMO”项目下进行,而一些特定的配置则在“DEMO.Android”中完成。对于Android开发者而言,熟悉“DEMO.Android”目录结构将有助于更高效地完成任务。此外,配置模拟器时,建议优先选择真机调试,以避免因内存和CPU占用过高导致的系统死机问题。
在项目创建完成后,引入了方便开发的NuGet程序包。通过右击项目并选择“管理NuGet程序包”,即可轻松完成程序包的引入。目前,我使用的NuGet包有2个,具体信息不再赘述。至此,项目准备工作基本完成,后续的开发计划将逐步展开。
Androidå¼åä¹èçï¼Bluetoothï¼
å¨ä¸ä¸ç¯ä¸æä»ç»äºWifiä¸ç½ç»è¿æ¥å¤çAndroidå¼åä¹WiFiä¸ç½ç»è¿æ¥å¤ç
ä¸é¢ï¼æ¥ç»§ç»è¯´è¯´Androidä¸èççåºæ¬ä½¿ç¨ã
Bluetoothæ¯ç®å使ç¨çæ广æ³çæ 线é讯åè®®ä¹ä¸,主è¦é对çè·ç¦»è®¾å¤é讯ï¼ç±³ï¼ï¼å¸¸ç¨äºè¿æ¥è³æºãé¼ æ å移å¨é讯设å¤çã
å¼å¾ä¸æçæ¯ï¼
android4.2æ°å¢äºé¨åæ°åè½ï¼ä½æ¯å¯¹äºBluetoothçæç人æ许å¼å§å¤´ç¼äºï¼é£å°±æ¯Android4.2å¼å ¥äºä¸ä¸ªæ°çèçåè®®æ éBLEãè°·æåBroadcomä¹é´çåä½ï¼å¼åæ°çèçåè®®æ ï¼å代äºåºäºå æ çBluezãå æ¤å¸åºä¸åºç°äºè设å¤çå ¼å®¹é®é¢ï¼å¾å¤èç设å¤å¨android4.2ææºä¸ä¸è½æ£å¸¸ä½¿ç¨ã
BluetoothAdapterç®åç¹æ¥è¯´å°±æ¯ä»£è¡¨äºæ¬è®¾å¤(ææºãçµèç)çèçéé å¨å¯¹è±¡ã
firstï¼we need permission
è¦æä½èçï¼å è¦å¨AndroidManifest.xmléå å ¥æé
**ä¸é¢æ¥ççå¦ä½ä½¿ç¨èçã **âââ
****Demo已就绪ï¼
è¿åå¼ï¼å¦æ设å¤å ·å¤èçåè½ï¼è¿åBluetoothAdapter å®ä¾ï¼å¦åï¼è¿ånull对象ã
æå¼èç设å¤çæ¹å¼ï¼
1.ç´æ¥è°ç¨å½æ°enable()å»æå¼èçè®¾å¤ ï¼
2.ç³»ç»APIå»æå¼èç设å¤ï¼è¯¥æ¹å¼ä¼å¼¹åºä¸ä¸ªå¯¹è¯æ¡æ ·å¼çActivityä¾ç¨æ·éæ©æ¯å¦æå¼èç设å¤ã
注æï¼1.å¦æèçå·²ç»å¼å¯ï¼ä¸ä¼å¼¹åºè¯¥Activityçé¢ã2.å¨ç®å大å¤æ°Androidææºä¸ï¼æ¯ä¸æ¯æå¨é£è¡æ¨¡å¼ä¸å¼å¯èççãå¦æèçå·²ç»å¼å¯ï¼é£ä¹èççå¼å ³ ,ç¶æä¼éçé£è¡æ¨¡å¼çç¶æèåçæ¹åã
1. æç´¢èç设å¤
使ç¨BluetoothAdapterçstartDiscovery()æ¹æ³æ¥æç´¢èç设å¤
startDiscovery()æ¹æ³æ¯ä¸ä¸ªå¼æ¥æ¹æ³ï¼è°ç¨åä¼ç«å³è¿åã该æ¹æ³ä¼è¿è¡å¯¹å ¶ä»èç设å¤çæç´¢ï¼è¯¥è¿ç¨ä¼æç»ç§ã该æ¹æ³è°ç¨åï¼æç´¢è¿ç¨å®é ä¸æ¯å¨ä¸ä¸ªSystem Serviceä¸è¿è¡çï¼æ以å¯ä»¥è°ç¨cancelDiscovery()æ¹æ³æ¥åæ¢æç´¢ï¼è¯¥æ¹æ³å¯ä»¥å¨æªæ§è¡discovery请æ±æ¶è°ç¨ï¼ã
ç³»ç»å¼å§æç´¢èç设å¤
^( * ï¿£(oo)ï¿£ ) ^ ç³»ç»ä¼åé以ä¸ä¸ä¸ªå¹¿æï¼
2.æ«æ设å¤
3.å®ä¹å¹¿ææ¥æ¶å¨æ¥æ¶æç´¢ç»æ
4.注å广æ
è·åéè¿çèç设å¤
第ä¸æ¥å»ºç«è¿æ¥ï¼é¦å Android sdkï¼2.0以ä¸çæ¬ï¼æ¯æçèçè¿æ¥æ¯éè¿BluetoothSocket建ç«è¿æ¥ï¼æå¡ç«¯BluetoothServerSocketå客æ·ç«¯ï¼BluetoothSocketï¼éæå®åæ ·çUUIDï¼æè½å»ºç«è¿æ¥ï¼å 为建ç«è¿æ¥çæ¹æ³ä¼é»å¡çº¿ç¨ï¼æ以æå¡å¨ç«¯å客æ·ç«¯é½åºå¯å¨æ°çº¿ç¨è¿æ¥ã
ï¼è¿éçæå¡ç«¯å客æ·ç«¯æ¯ç¸å¯¹æ¥è¯´çï¼
两个èç设å¤ä¹é´çè¿æ¥ï¼åå¿ é¡»å®ç°æå¡ç«¯ä¸å®¢æ·ç«¯çæºå¶ã
å½ä¸¤ä¸ªè®¾å¤å¨åä¸ä¸ªRFCOMM channelä¸åå«æ¥æä¸ä¸ªè¿æ¥çBluetoothSocketï¼è¿ä¸¤ä¸ªè®¾å¤æå¯ä»¥è¯´æ¯å»ºç«äºè¿æ¥ã
æå¡ç«¯è®¾å¤ä¸å®¢æ·ç«¯è®¾å¤è·åBluetoothSocketçéå¾æ¯ä¸åçã
1ï¼æå¡ç«¯è®¾å¤æ¯éè¿acceptedä¸ä¸ªincoming connectionæ¥è·åçï¼
2ï¼å®¢æ·ç«¯è®¾å¤åæ¯éè¿æå¼ä¸ä¸ªå°æå¡ç«¯çRFCOMM channelæ¥è·åçã
æå¡ç«¯
éè¿è°ç¨BluetoothAdapterçlistenUsingRfcommWithServiceRecord(String, UUID)æ¹æ³æ¥è·åBluetoothServerSocketï¼UUIDç¨äºå®¢æ·ç«¯ä¸æå¡ç«¯ä¹é´çé 对ï¼
客æ·ç«¯
è°ç¨BluetoothServiceçcreateRfcommSocketToServiceRecord(UUID)æ¹æ³è·åBluetoothSocketï¼è¯¥UUIDåºè¯¥åäºæå¡ç«¯çUUIDï¼ã
è°ç¨BluetoothSocketçconnect()æ¹æ³ï¼è¯¥æ¹æ³ä¸ºblockæ¹æ³ï¼ï¼å¦æUUIDåæå¡ç«¯çUUIDå¹é ï¼å¹¶ä¸è¿æ¥è¢«æå¡ç«¯acceptï¼åconnect()æ¹æ³è¿åã
æ°æ®ä¼ éï¼éè¿ä»¥ä¸æä½ï¼å°±å·²ç»å»ºç«çBluetoothSocketè¿æ¥äºï¼æ°æ®ä¼ éæ éæ¯éè¿æµçå½¢å¼
è·åæµ
该类就æ¯å ³äºè¿ç¨èç设å¤çä¸ä¸ªæè¿°ãéè¿å®å¯ä»¥åæ¬å°èç设å¤---BluetoothAdapterè¿æ¥éä¿¡ã
好å¤ä¸è¥¿æä¹ä¸ç¥éæä¹æè¿°ï¼ä¸é¢ç»åºDemoï¼
å好æåå¦ä¹ çå°ä¼ä¼´é®æListViewæä¹ç¨ï¼é£æå°±ç¨ListViewã
æºç ï¼
RairDemo
GitHub: /Rairmmd/android-demo
Coding: /u/Rair/p/RairDemo/git
å¦ä½è°è¯Android Framework
ç¨Android Studioè¿è¡æºç è°è¯
å¦ä¸ææè¿°ï¼å¦æéè¦å®ç°æºç è°è¯ï¼å¿ é¡»ç¥é足å¤çè°è¯ä¿¡æ¯ï¼å¨nativeè°è¯ä¸å°±æ¯æè°çãè°è¯ç¬¦å·ããä½æ¯releaseçæ¬çå¨æé¾æ¥åºæè å¯æ§è¡æ件ä¸è¬å¹¶ä¸ä¼å å«æ们éè¦çè°è¯ä¿¡æ¯ï¼å¨Androidç³»ç»ä¸ï¼ /system/lib/* ç®å½ä¸çé£äºç³»ç»so并没æ足å¤çè°è¯ä¿¡æ¯ï¼å æ¤å¦æè¦è¿è¡æºç è°è¯ï¼å¿ é¡»èªå·±ç¼è¯Androidæºä»£ç ï¼æè½è·åè°è¯ä¿¡æ¯ï¼è¿è让è°è¯å¨åå©æ们è°è¯ã
Androidæºç ç¼è¯æ¯ä¸ªéº»ç¦äºå¿ï¼æåè¿ä¸ç¯æç« ä»ç» å¦ä½ä½¿ç¨Dockerè°è¯ ï¼ä½æ¯ï¼Androidçæ¬ä¼å¤ï¼å¦æççéè¦è°è¯å个çæ¬ï¼å¨æ¬å°è¿è¡ç¼è¯å ä¹æ¯ä¸å¯è½çââä¸ä¸ªçæ¬çº¦å G空é´ï¼å¦ææ¯ä¸ªçæ¬é½ç¼è¯ï¼ä½ çMacè¿æ空é´å¯ç¨åï¼å æ¤æ¯è¾æ¨è使ç¨äºæå¡è¿è¡æºç ç¼è¯ï¼æ¯å¦ä½¿ç¨é¿éäºçECSï¼Mçç½éåéå°±è½ä¸è½½å®æºç ï¼ç¼è¯é度è¿å强ï¼4æ ¸8G两个åå°æ¶ãæ¯è¿äº :) å¦æä½ æ²¡æç²¾åç¼è¯Androidæºç ï¼æè¿ä¸ª Demoå·¥ç¨ å¯ä»¥è®©ä½ å°å°é²ï¼éé¢å å«ä¸äºè°è¯çå¿ è¦æ件ï¼å¯ä»¥ä½ä¼ä¸ä¸Nativeè°è¯çæè§ã
å¦ææ们已ç»æ¥æäºè°è¯ç¬¦å·ï¼é£ä¹è¿éè¦ä¿è¯ä½ ç符å·æ件å设å¤ä¸çæ£è¿è¡çå¨æé¾æ¥åºæè å¯æ§è¡æ件æ¯å¯¹åºçï¼ä¸ç¶å°±æ¯é¸¡åé¸è®²äºãæç®åçåæ³å°±æ¯ä½¿ç¨æ¨¡æå¨ãæ们ç¼è¯å®æºç ä¹åï¼ä¸ä¸ªä¸»è¦çç¼è¯äº§ç©å°±æ¯ system.img ï¼è¿ä¸ª system.img ä¼å¨å¯å¨ä¹åæè½½å°è®¾å¤ç /system ååºï¼èsystemååºå å«äºAndroidç³»ç»è¿è¡æ¶çç»å¤§é¨åå¯æ§è¡æ件åå¨æé¾æ¥åºï¼èè¿äºæ件就æ¯æ们çç¼è¯è¾åºï¼æ£å¥½å¯ä»¥ä¸ç¼è¯å¾å°çè°è¯ç¬¦å·è¿è¡é åè°è¯ã模æå¨æä¸ä¸ª -system é项ç¨æ¥æå®æ¨¡æå¨ä½¿ç¨ç system.imgæ件ï¼äºæ¯è¿ä¸ªé®é¢ä¹è§£å³äºã
æåä¸ä¸ªé®é¢å°±æ¯ï¼æ¢ç¶æ¯æºç è°è¯ï¼å½ç¶éè¦æºç äºï¼æ们å¯ä»¥å¨ AOSP ä¸ä¸è½½éè¦çæºç å³å¯ï¼éè¦æ³¨æçæ¯ï¼å¨checkåæ¯çæ¶åï¼å¿ é¡»ä¿è¯ä½ çåæ¯åç¼è¯æºç æ¶åçåæ¯æ¯ä¸è´çã
android studioä¸New Moduleçå 个类åçåºå«
使ç¨Android Studioå建moduleï¼New Moduleçªå£æ示é项çå个moduleåºå«ï¼Phone & Table Moduleï¼å建ææºç±»åæå¹³æ¿çµèç±»åçmoduleï¼æ¢å¥è¯è¯´å建ææºæå¹³æ¿çµèçAndroid项ç®ï¼é常Androidå¼åè é½é»è®¤éä¸è¯¥é项ï¼é¤éæ³è¦å¼åAndroid Watchï¼æºè½æ表ï¼
Android Libraryï¼å建Androidç±»åºï¼å°å¹³æ¶æ»ç»çTeachCourse Android æºç Demoå°è£ æç±»åºçå½¢å¼ï¼æ³è¦éä¸è¯¥é¡¹ï¼ç¶åå¯ä»¥å¨å¤ä¸ªmoduleä¸å¼ç¨
Android Wear Moduleï¼å建æºè½ææºçAndroid项ç®ï¼è¯¥moduleç¨äºå建æºè½æ表æ¶ï¼é»è®¤æ·»å ä¸äºä¾èµå±æ§
Android TV Moduleï¼å建æºè½çµè§çAndroid项ç®ï¼å¼åçåºç¨ç¨åºä¸»è¦é对æºè½çµè§ï¼è¿è¡åå®è£ å¨TVä¸ï¼ä¸ºä»ä¹éè¦å°å ¶åPhone & Table Moduleåºåå¼ï¼ä¸»è¦TV ModuleåPhone &Table Moduleå¨å°ºå¯¸åå¾æ ãå¸å±ææ¯è¾å¤§çåºå ¥ï¼ç¬ç«å¼æ¥ï¼æ¯è¾æ¹ä¾¿åºæ¥
Glass Moduleï¼å建æºè½ç¼éçAndroid项ç®ï¼å¼åçåºç¨ç¨åºè¶æ¥è¶ä¸°å¯ï¼æºè½å®¶å±