当前位置:首页 » 安卓系统 » 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定时任务,参数填写为测试次数,完成。

热点内容
李宗瑞文件夹 发布:2025-02-13 04:27:59 浏览:609
phpparent的parent 发布:2025-02-13 04:18:08 浏览:451
小容量存储器市场 发布:2025-02-13 04:01:11 浏览:371
ickeck文件夹 发布:2025-02-13 04:00:21 浏览:640
上传照片文案 发布:2025-02-13 03:53:13 浏览:426
电脑版花雨庭怎么调中文服务器 发布:2025-02-13 03:32:35 浏览:37
linux开发android 发布:2025-02-13 03:32:34 浏览:486
查询重复字段的sql语句 发布:2025-02-13 03:12:42 浏览:323
8uftp上传网站 发布:2025-02-13 03:01:57 浏览:243
电脑玩游戏如何配置电源 发布:2025-02-13 03:01:53 浏览:362