Tôi mới sử dụng Android. Tôi đang thiết kế một ứng dụng Android nhận dữ liệu nối tiếp từ thiết bị phần cứng thông qua bluetooth. Tôi đang làm việc trên mong muốn HTC S. Tôi đã sử dụng mã trò chuyện Bluetooth mẫu để nhận dữ liệu. Nhưng dữ liệu nhận được không chính xác. Nó bỏ lỡ một số giá trị. Bất cứ ai có thể vui lòng cung cấp cho tôi bất kỳ mã mẫu nào khác để nhận số lượng lớn dữ liệu qua bluetooth và lưu nó vào một tệp.Cách nhận dữ liệu nối tiếp bằng cách sử dụng android bluetooth
Trả lời
thử mã này:
Hoạt động:
package Android.Arduino.Bluetooth;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;
import android.widget.EditText;
import android.widget.Button;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Set;
import java.util.UUID;
public class MainActivity extends Activity
{
TextView myLabel;
EditText myTextbox;
BluetoothAdapter mBluetoothAdapter;
BluetoothSocket mmSocket;
BluetoothDevice mmDevice;
OutputStream mmOutputStream;
InputStream mmInputStream;
Thread workerThread;
byte[] readBuffer;
int readBufferPosition;
int counter;
volatile boolean stopWorker;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button openButton = (Button)findViewById(R.id.open);
Button sendButton = (Button)findViewById(R.id.send);
Button closeButton = (Button)findViewById(R.id.close);
myLabel = (TextView)findViewById(R.id.label);
myTextbox = (EditText)findViewById(R.id.entry);
//Open Button
openButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
try
{
findBT();
openBT();
}
catch (IOException ex) { }
}
});
//Send Button
sendButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
try
{
sendData();
}
catch (IOException ex) { }
}
});
//Close button
closeButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
try
{
closeBT();
}
catch (IOException ex) { }
}
});
}
void findBT()
{
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if(mBluetoothAdapter == null)
{
myLabel.setText("No bluetooth adapter available");
}
if(!mBluetoothAdapter.isEnabled())
{
Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBluetooth, 0);
}
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
if(pairedDevices.size() > 0)
{
for(BluetoothDevice device : pairedDevices)
{
if(device.getName().equals("MattsBlueTooth"))
{
mmDevice = device;
break;
}
}
}
myLabel.setText("Bluetooth Device Found");
}
void openBT() throws IOException
{
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); //Standard SerialPortService ID
mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
mmSocket.connect();
mmOutputStream = mmSocket.getOutputStream();
mmInputStream = mmSocket.getInputStream();
beginListenForData();
myLabel.setText("Bluetooth Opened");
}
void beginListenForData()
{
final Handler handler = new Handler();
final byte delimiter = 10; //This is the ASCII code for a newline character
stopWorker = false;
readBufferPosition = 0;
readBuffer = new byte[1024];
workerThread = new Thread(new Runnable()
{
public void run()
{
while(!Thread.currentThread().isInterrupted() && !stopWorker)
{
try
{
int bytesAvailable = mmInputStream.available();
if(bytesAvailable > 0)
{
byte[] packetBytes = new byte[bytesAvailable];
mmInputStream.read(packetBytes);
for(int i=0;i<bytesAvailable;i++)
{
byte b = packetBytes[i];
if(b == delimiter)
{
byte[] encodedBytes = new byte[readBufferPosition];
System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length);
final String data = new String(encodedBytes, "US-ASCII");
readBufferPosition = 0;
handler.post(new Runnable()
{
public void run()
{
myLabel.setText(data);
}
});
}
else
{
readBuffer[readBufferPosition++] = b;
}
}
}
}
catch (IOException ex)
{
stopWorker = true;
}
}
}
});
workerThread.start();
}
void sendData() throws IOException
{
String msg = myTextbox.getText().toString();
msg += "\n";
mmOutputStream.write(msg.getBytes());
myLabel.setText("Data Sent");
}
void closeBT() throws IOException
{
stopWorker = true;
mmOutputStream.close();
mmInputStream.close();
mmSocket.close();
myLabel.setText("Bluetooth Closed");
}
}
VÀ Ở đây bố trí:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:ignore="TextFields,HardcodedText" >
<TextView
android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Type here:" />
<EditText
android:id="@+id/entry"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/label"
android:background="@android:drawable/editbox_background" />
<Button
android:id="@+id/open"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@id/entry"
android:layout_marginLeft="10dip"
android:text="Open" />
<Button
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/open"
android:layout_toLeftOf="@id/open"
android:text="Send" />
<Button
android:id="@+id/close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/send"
android:layout_toLeftOf="@id/send"
android:text="Close" />
đây cho Manifest: thêm vào ứng dụng
// permission must be enabled complete
<manifest ....>
<application>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
</application>
</manifest>
Nhờ mã của bạn thực sự đã giúp tôi ra – ppumkin
tôi nhận được một NullPointerException trên dòng mmSocket = mmDevice.createRfcommSocketToServiceRecord (uuid);. Bất kỳ sự giúp đỡ, xin vui lòng? –
Tomas Tôi nghĩ rằng bạn có thể có một UUID không chính xác cho thiết bị? Giá trị nào bạn đang sử dụng? – bbill
Tôi đã thử điều này để truyền dữ liệu liên tục (giá trị nổi được chuyển đổi thành chuỗi) từ PC (MATLAB) sang điện thoại của tôi. Tuy nhiên, vẫn còn ứng dụng của tôi misreads delimiter '\ n' và dữ liệu vẫn bị cắt xén. Vì vậy, tôi lấy ký tự 'N' làm dấu phân cách chứ không phải là '\ n' (nó có thể là bất kỳ ký tự nào không xuất hiện như một phần dữ liệu của bạn) và tôi đã đạt được tốc độ truyền tốt hơn - Tôi chỉ chậm trễ 0,1 giây giữa truyền các mẫu liên tiếp - với hơn 99% tính toàn vẹn dữ liệu tại ví dụ nhận trong số 2000 mẫu (giá trị float) mà tôi truyền đi, chỉ 10 mẫu không được giải mã đúng trong ứng dụng của tôi.
Câu trả lời của tôi ngắn gọn là: Chọn dấu tách khác với '\ r' hoặc '\ n' vì chúng tạo ra nhiều vấn đề hơn khi truyền dữ liệu theo thời gian thực khi so sánh với các ký tự khác. Nếu chúng ta làm việc nhiều hơn, có thể chúng ta có thể tăng tốc độ truyền tải nhiều hơn. Tôi hy vọng câu trả lời của tôi sẽ giúp ai đó!
Vấn đề với kết nối null có liên quan đến hàm findBT(). bạn phải thay đổi tên thiết bị từ "MattsBlueTooth" thành tên thiết bị của bạn cũng như xác nhận UUID cho dịch vụ/thiết bị của bạn. Sử dụng một cái gì đó như ứng dụng BLEScanner để confrim cả trên Android.
cách xác nhận UUID cho bất kỳ thiết bị/dịch vụ nào? –
Hãy xem lớp học tuyệt vời Bluetooth Serial có khả năng onResume()
đã giúp tôi rất nhiều. Tôi hy vọng điều này sẽ giúp;)
- 1. Giao tiếp nối tiếp với Arduino UNO và Mac bằng cách sử dụng bluetooth mate
- 2. Cách tìm UUID của thiết bị Bluetooth cổng nối tiếp?
- 3. Giao tiếp giữa các thiết bị qua Bluetooth bằng cách sử dụng Phonegap trên Android?
- 4. Lỗi Transmisison dữ liệu bằng SPP qua Bluetooth trên Android
- 5. Nối tiếp trường dữ liệu = "thời gian" bằng cách sử dụng XmlSerializer
- 6. Cách gửi/nhận dữ liệu qua điện thoại bluetooth android đến thiết bị y tế có bluetooth
- 7. nhận giá trị chuỗi tiếp theo từ cơ sở dữ liệu bằng cách sử dụng hibernate
- 8. Nhận boolean từ cơ sở dữ liệu bằng cách sử dụng Android và SQLite
- 9. Nối tiếp thành XML bằng cách sử dụng boost :: serialization
- 10. Đọc dữ liệu từ thiết bị bluetooth trong android
- 11. Android Bluetooth - Không thể kết nối ra
- 12. Nhiều sự cố kết nối Bluetooth Android?
- 13. Android: HTTPS (SSL) kết nối bằng cách sử dụng HttpsURLConnection
- 14. Gỡ lỗi ứng dụng bằng cách sử dụng ADB qua Bluetooth cho trên netbook Android-x86
- 15. Lỗi kết nối Bluetooth Android
- 16. Cổng nối tiếp ReadLine vs ReadExisting hoặc cách đọc dữ liệu từ cổng nối tiếp đúng cách
- 17. Cách đăng nhập dữ liệu hồ bơi kết nối bằng cách sử dụng BoneCP
- 18. Cách đa dữ liệu bằng Android Volley
- 19. Cách gửi dữ liệu đến trang web bằng cách sử dụng ứng dụng android
- 20. Cách chính xác để đọc cổng nối tiếp bằng cách sử dụng .NET framework là gì?
- 21. cách tạo excelsheet có thể nối tiếp bằng cách sử dụng java
- 22. Cách in hình ảnh và một số dữ liệu từ thiết bị Android, sử dụng máy in (in qua bluetooth)?
- 23. Cách chấp nhận tệp bluetooth đã nhận trong ứng dụng Android?
- 24. Android Bluetooth không ghép nối với nhau
- 25. Nhập dữ liệu CSV bằng cách sử dụng PHP/MySQL
- 26. Cách nhận trạng thái sử dụng dữ liệu Nền ứng dụng bất kỳ trong Android
- 27. không thể kết nối DB bằng cách sử dụng nguồn dữ liệu JNDI trên JBoss
- 28. Giao tiếp bằng USB Android
- 29. Giao tiếp cổng nối tiếp: đấu nối cổng nối tiếp vs sử dụng cổng nối tiếp DataReceived event
- 30. Cách ghi âm bằng tai nghe bluetooth
tôi cần một cái gì đó tương tự như trong sự hiệp nhất :-( – mindmyweb