當前位置:首頁 » 安卓系統 » androidat命令

androidat命令

發布時間: 2023-05-21 08:11:39

① android添加藍牙電量

1.      HFP 命令AT+IPHONEACCEV

描述:報告耳機的狀態變更

發起者:耳機

格式:AT+IPHONEACCEV=[Number of key/value pairs ],[key1 ],[val1 ],[key2

],[val2 ],…

參數:

Number of key/value pairs :接下來參數的數量

key:被報告狀態變化的類型

1 =電量等級

2 =暫停狀態

val:更改的值

Battery events:0-9之間數字的字元串 A

string value between 『0』 and 『9』.

Dock state: 0 = undocked, 1 = docked.

           Example:AT+IPHONEACCEV=1,1,3

2.android  framework 修改點

packages/apps/Bluetooth/src/com/android/bluetooth/hfp/HeadsetStateMachine.java

BluetoothAssignedNumbers.APPLE可以隨便用哪個公司的,但注冊廣播時要一致就行。

   static {

         classInitNative();

 型亂磨        VENDOR_SPECIFIC_AT_COMMAND_COMPANY_ID = new HashMap();

         VENDOR_SPECIFIC_AT_COMMAND_COMPANY_ID.put("+XEVENT",BluetoothAssignedNumbers.PLANTRONICS);

         VENDOR_SPECIFIC_AT_COMMAND_COMPANY_ID.put("+ANDROID",BluetoothAssignedNumbers.GOOGLE);  陪絕  +VENDOR_SPECIFIC_AT_COMMAND_COMPANY_ID.put("+XAPL",BluetoothAssignedNumbers.APPLE);

 +VENDOR_SPECIFIC_AT_COMMAND_COMPANY_ID.put("+IPHONEACCEV",BluetoothAssignedNumbers.APPLE);

     }

獲取藍牙電量需要向藍牙發送回復的at命令:

private (String atString) {

       log("processVendorSpecificAt - atString = " + atString);

       // Currently we accept only SET type commands.

       int indexOfEqual = atString.indexOf("=");

       if (indexOfEqual == -1) {

           Log.e(TAG, "processVendorSpecificAt: command type error in " +atString);

           return false;

       }

       String command = atString.substring(0, indexOfEqual);

       Integer companyId = VENDOR_SPECIFIC_AT_COMMAND_COMPANY_ID.get(command);

       if (companyId == null) {

           Log.e(TAG, "processVendorSpecificAt: unsupported command: " +atString);

        卜斗   return false;

       }

       String arg = atString.substring(indexOfEqual + 1);

       if (arg.startsWith("?")) {

           Log.e(TAG, "processVendorSpecificAt: command type error in " +atString);

           return false;

       }

       Object[] args = generateArgs(arg);

        + if ("+XAPL".equals(command)) {

        + processAtXapl(args);

        + }

        (command,

                                          companyId,

                                          BluetoothHeadset.AT_CMD_TYPE_SET,

                                          args,

                                          mCurrentDevice);

       atResponseCodeNative(HeadsetHalConstants.AT_RESPONSE_OK, 0);

        return true;

}

/**

      * Process AT+XAPL AT command

      * @param args command arguments after theequal sign

      * @param device Remote device that hassent this command

      */

     private void processAtXapl(Object[] args){

         if (args.length != 2) {

            Log.w(TAG, "processAtXapl()args length must be 2: " + String.valueOf(args.length));

             return;

         }

         if (!(args[0] instanceof String) ||!(args[1] instanceof Integer)) {

             Log.w(TAG, "processAtXapl()argument types not match");

             return;

         }

         // feature = 2 indicates that wesupport battery level reporting only

                Log.d("tsq77","+XAPL=iPhone,");

        atResponseStringNative("+XAPL=iPhone," + String.valueOf(2));

     }

2.上層app監聽廣播獲取電量

packages/apps/Settings/src/com/android/settings/bluetooth/BluetoothSettings.java

在settings中的藍牙界面中注冊廣播,然後把電量顯示出來。

       //aaron

       IntentFilter filter=new IntentFilter();

       filter.addAction(BluetoothHeadset.ACTION_VENDOR_SPECIFIC_HEADSET_EVENT);

       //filter.addCategory(BluetoothHeadset.VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY+"."+BluetoothAssignedNumbers.

APPLE);

       filter.addCategory(BluetoothHeadset.VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY+"."+BluetoothAssignedNumbers.

APPLE);

       getActivity().registerReceiver(mIntentReceiver,filter);

       Log.i("a", "registerReceiver  ");

       //end

   private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {

       @Override

       public void onReceive(Context context, Intent intent) {

           final String action = intent.getAction();

           if(action.equals(BluetoothHeadset.ACTION_VENDOR_SPECIFIC_HEADSET_EVENT)) {

                Log.i("a","intent  "+intent);

                String command=intent.getStringExtra(BluetoothHeadset.EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD);

                if("+IPHONEACCEV".equals(command)) {

                    Object[] args = (Object[])intent.getSerializableExtra(BluetoothHeadset.EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_ARGS);

                    if (args.length >= 3&& args[0] instanceof Integer &&((Integer)args[0])*2+1<=args.length) {

                        for (inti=0;i<((Integer)args[0]);i++) {

                           if(!(args[i*2+1] instanceof Integer) || !(args[i*2+2] instanceof Integer)) {

                                continue;

                            }

                            if(args[i*2+1].equals(1)) {

                                floatlevel=(((Integer)args[i*2+2])+1)/10.0f;//獲取的電量百分比

                                break;

                            }

                        }

                    }

                }

           }

       }

};

② Android應用如何向藍牙設備發送AT命令

建立socket連接,看協議怎麼寫的,就怎麼發命令。

③ android平台用AT命令發簡訊

需要COM口連接簡訊貓,然後根據簡訊貓中的AT命令來操作。

④ Android 發送AT指令

1、hardware\ril\reference-ril\Reference-ril.c 中 onRequest() 處理RIL_REQUEST_DIAL 時會 調用requestDial();
2、requestDial()中轉換RIL_REQUEST_DIAL 請求為AT指令;
3、通過at_send_command()下發;
4、經過at_send_command_full,at_send_command_full_nolock ,writeline()寫到設備中。

⑤ android 怎麼通過藍牙向一個硬體發送AT指令

將16進制的字元串轉換成bytes,通過hexstring2bytes轉換,從而發送指令。

⑥ Android平台的手機,怎麼在PC上通過AT指令控制手機收發簡訊

向日葵遠程式控制制軟體支持電腦控制手機、手機控制手機。能實現以上你說的場景,收發簡訊。控制手機實現後,不僅可以在電腦端或者手機端控制這台手機收發短息,還可以逗穗宴播放視頻、山銀逛族喊淘寶、下載軟體等等

⑦ Android 應用程序怎麼通過RIL層發送AT命令

android 電話服務就是通過AT來實現的,不過不是java應用層直接發AT
而是通過socket,把命令發到RIL層,RIL篩選AT命令,與底層交互,實現電悄緩雹話的啟帆各個功能

你可以查一查RIL的實哪棚現

⑧ Android平台到底能不能通過串口發送AT指令呢,急!!!

AT命令(Attention)在手機中,用於對modem(也就是移動模塊)通過串口命令進行操作,處理與語音電話、簡訊和數據。

關於AT命令:

  1. Android系統與AT命令

    對於智能手機,AP和BP分離的情況,在AP上的系統通過串口和BP通信是個不錯方式。在Android的源碼中有一個內部包com.android.internal.telephony中有對AT命令的封裝和解析,但這種internal的包開發者不能調用的SDK部分,可以用來封裝ROM。這說明Android對AT command的方式是支持的。

  2. 對於Android如何調用AT command

    用root登錄命令行,直接對串口進行操作,如echo -e "AT " > /dev/smd0

    具體的串口,不同設備會有不同,甚至不一定會提供。這種方式,開發者是可以調用的,通過Runtime.exec直接執行命令行命令,但要求是root,例如echo -e "ATD123456789; " > /dev/smd0,撥打123456789的號碼。

  3. 目前最新的AT命令標准發布與2014.6.27,似乎還活得挺滋潤的。但是給出的keywords是UMTS, GSM, command, terminal, LTE這說明CDMA確實很可能不是採用AT命令的方式。

⑨ android怎麼通過藍牙向一個硬體發送AT指令

將16進制的字元串轉換成bytes,通過hexstring2bytes轉換而不能直接用getbytes
String string = "41542B50494F392C310D";
mmOutStream.write(string.getBytes());

讀取inputsteam中的
?
Log.d("example", "do read");

不執行,完整代碼如下:

?

/遲純**
* This thread runs ring a connection with a remote device. It handles all
* incoming and outgoing transmissions.
*/
private class ConnectedThread extends Thread {
private final BluetoothSocket mmSocket;
private final InputStream mmInStream;
private final OutputStream mmOutStream;

public ConnectedThread(BluetoothSocket socket, String socketType) {
Log.d(TAG, "create ConnectedThread: " + socketType);
mmSocket = socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;

// Get the BluetoothSocket input and output streams
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) {
Log.e(TAG, "temp sockets not created", e);
}

mmInStream = tmpIn;
mmOutStream = tmpOut;
}

public void run() {
Log.i(TAG, "BEGIN mConnectedThread");
byte[] buffer = new byte[1024];
int bytes;

// Keep listening to the InputStream while connected
while (true) {
Log.d("example", "do read");
try {
/如沖/ Read from the InputStream
bytes = mmInStream.read(buffer);

// Send the obtained bytes to the UI Activity
mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes,
-1, buffer).sendToTarget();
} catch (IOException e) {
Log.e(TAG, "disconnected", e);
connectionLost();
/渣旦殲/ Start the service over to restart listening mode
BluetoothChatService.this.start();
break;
}
}
}

/**
* Write to the connected OutStream.
*
* @param buffer
* The bytes to write
*/
public void write(byte[] buffer) {

String string = "41542B50494F392C310D";
try {
mmOutStream.write(string.getBytes());

// Share the sent message back to the UI Activity
mHandler.obtainMessage(BluetoothChat.MESSAGE_WRITE, -1, -1,
buffer).sendToTarget();
} catch (IOException e) {
Log.e(TAG, "Exception ring write", e);
}
}

public void cancel() {
try {
mmSocket.close();
} catch (IOException e) {
Log.e(TAG, "close() of connect socket failed", e);
}
}
}

⑩ Android怎麼直接發AT命令測試

一、准備測試環境及測試文件
1、安裝Java JDk,設置好環境變數
2、安裝Android SDK,設置好環境變數(詳細步驟略)
3、准備被測apk及測試所需的一些工具
二、啟動模擬器,並解鎖
批處理腳本
emulator -avd Galaxy4.2 ::啟動模擬器
ping -n 90 127.0.0.1>nul ::等待模擬器啟動成功,-n 90 為等待時間,建議設置大一點
adb shell input keyevent 82 ::模擬器打開後都會鎖屏,adb模擬鍵盤輸入,解鎖
ping -n 2 127.0.0.1>nul
三、腳本參數初始化
代碼如下:
set appName=TestAndroid.apk ::被測程序名稱
set pkgName=com.example.testandroid ::被測程序包名
set openName=com.example.testandroid.MainActivity ::被測試程序主activity
set "times=%1" ::測試次數,腳本傳入參數
x blat.exe C:\Windows\System32\ /Y ::將郵件工具復制到系統文件夾下,需關閉360衛士
四、循環執行安裝打開關閉卸載
echo 測試開始>source.txt ::創建一個source文件記錄日誌
for /l %%a in (1,1,%times%) do (
adb install TestAndroid.apk ::安裝apk
adb shell am start -W -n %pkgName%/%openName% ::打開apk
call cmd /c close.bat %pkgName% ::關閉apk
adb uninstall %pkgName% ::卸載apk
adb logcat -d |findstr "^D/k.*}\>" ::過濾logcat,獲取需要的內容
adb logcat -c ::清除logcat日誌
taskkill /f /im adb.exe)>>source.txt ::結束adb進程,防止佔用source文件
::每次操作日誌都記錄在source中
五、處理source.txt提取關鍵信息,並發送郵件
六、設置windows定時任務,參數填寫為測試次數,完成。

熱點內容
fbe加密 發布:2025-05-18 01:16:34 瀏覽:250
求中點編程 發布:2025-05-18 01:03:14 瀏覽:840
安卓pay是什麼 發布:2025-05-18 01:02:27 瀏覽:747
免費手游掛機腳本 發布:2025-05-18 00:55:43 瀏覽:354
sd卡手機存儲系統存儲 發布:2025-05-18 00:55:28 瀏覽:637
pythonlistintstr 發布:2025-05-18 00:48:18 瀏覽:604
輕應用緩存 發布:2025-05-18 00:31:02 瀏覽:252
鳥存儲空氣 發布:2025-05-18 00:20:24 瀏覽:201
linux刻錄iso 發布:2025-05-18 00:16:15 瀏覽:663
php動態參數 發布:2025-05-18 00:12:05 瀏覽:425