gpt4 book ai didi

Android 蓝牙应用程序在通话期间无响应

转载 作者:行者123 更新时间:2023-11-29 14:01:57 29 4
gpt4 key购买 nike

我有一个通过异步任务与蓝牙设备通信的应用程序如果我接到电话并且在通话期间我返回到应用程序屏幕变暗,应用程序无响应后退按钮不起作用...并且未显示 ANR 对话框有什么想法吗?

这是处理连接的代码:

@Override
protected Object doInBackground(Object... params) {
//boolean protocolUpdated;
int read = 0; // The amount of bytes read from the socket.
byte[] buff = new byte[MessageHandler.BUFFERSIZE]; // The data buffer.
byte[] tmpSend = null; // Misc bytes arrays returned from ProtocolParser as answers to send after decoding calls.
in = null;
out = null;

try {
if (Float.parseFloat(version) > 2.2){
Method m = dev.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
sock = (BluetoothSocket) m.invoke(dev, 1);
}

else sock = dev.createRfcommSocketToServiceRecord(UUID_RFCOMM_GENERIC); // UUID is constant for serial BT devices.
sock.connect(); // connect to the BT device. This is rather heavy, may take 3 secs.
sendMessage(MESSAGE_CONNECTION_ESTABLISHED);
in = sock.getInputStream();
out = sock.getOutputStream();

timer = new Timer();
startFinishTimer(); //initialize finish timer

while(read != -1) { // read = -1 means EOF.
do { // as long as there is anything to send in the send queue - send it.
tmpSend = parser.nextSend();
if(tmpSend != null){
String msg = parseMessage(tmpSend);
Log.d("Writing:",msg);
out.write(tmpSend);
}
} while(tmpSend != null);
read = in.read(buff); // read. This is a blocking call, to break this, interrupt the thread.
timer.cancel();
startFinishTimer(); //read is a blocking call so timer should be restarted only after read bytes.
parser.parse(buff,read); // parse the read message using the logic in the ProtocolParser derived class.
tmpSend = parser.getPool(); // if pool ack is required - send it.
if (tmpSend != null){

Log.d("Writing:",parseMessage(tmpSend));
out.write(tmpSend);

}
if (read != 0){
Log.d("Read:",parseMessage(buff));
tmpSend = parser.getAnswer(); // if answer is required (based on message) - send it.
if(tmpSend != null){
out.write(tmpSend);
}
}
else {
Exception e = new IOException();
throw e;
}
}
}catch (IOException e){
e.printStackTrace();
Log.d("Connection: ", "Bluetooth Connection CRASHED!");
sendMessage(MESSAGE_CONNECTION_LOST);
}catch (Exception e){
e.printStackTrace();
}
return null;
}

最佳答案

实际上没有足够的上下文来找到您的问题。

确保您从主线程启动此任务,否则 PostExecute 将附加到错误的线程,您可能会参加比赛。

确保您没有向代码中的多个处理程序发送相同的消息。消息它是一个链接列表,在这种情况下你可能会收到 ANR。

获取/data/anr/traces.txt 以确保它不是 ANR。

可以在文件开头按时间确定。

关于Android 蓝牙应用程序在通话期间无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9094838/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com