怎么连接蓝牙啊!为什么连接不上TAT,,
public class MainActivity extends AppCompatActivity implements DeviceFragment.OnDeviceSelected{
private static final int REQUEST_SELECT_IMAGE=1;
private static final int REQUEST_ENABLE_BLUETOOTH=10;
private Bitmap bitmap=null;
private BluetoothAdapter mBlueToothAdapter=null;
private ImageView mImg;
private Button mBtnSelectImg;
private Button mBtnSendImg;
private BluetoothDevice mmmDevice=null;
private BluetoothService mService=null;
Handler mHandler =new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case Constants.MESSAGE_STATE_CHANGE:
switch (msg.arg1){
case BluetoothService.STATE_CONNECTING:
getSupportActionBar().setSubtitle("正在连接中...");
}
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBlueToothAdapter = BluetoothAdapter.getDefaultAdapter();
if(mBlueToothAdapter==null){
Toast.makeText(this, "设备不支持蓝牙", Toast.LENGTH_SHORT).show();
finish();
}
initView();
initEvent();
}
private void initEvent() {
mBtnSelectImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取本地图片
Intent getAlbum=new Intent(Intent.ACTION_GET_CONTENT);
getAlbum.setType("image/*");
startActivityForResult(getAlbum,REQUEST_SELECT_IMAGE);
}
});
mBtnSendImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//TODO
}
});
}
private void initView() {
mImg=(ImageView) findViewById(R.id.id_img);
mBtnSelectImg=(Button) findViewById(R.id.id_select_img);
mBtnSendImg=(Button) findViewById(R.id.id_send_img);
}
private void showToast(String msg){
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.my_menu,menu);
ActionBar supportActionBar = getSupportActionBar();
supportActionBar.setTitle("慕课快传");
supportActionBar.setSubtitle("未连接");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.bluetooth:
DeviceFragment df=new DeviceFragment();
FragmentTransaction ft=getSupportFragmentManager().beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
df.show(ft,"df");
break;
case R.id.id_show_device:
Intent discoverableIntent = new
Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivity(discoverableIntent);
break;
case R.id.id_clear_img:
showToast("清除图片?");
break;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode==REQUEST_SELECT_IMAGE){
Uri uri=data.getData();
String img_url=uri.getPath();
ContentResolver cr=this.getContentResolver();
try {
bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
mImg.setImageBitmap(bitmap);
}
if(requestCode==REQUEST_ENABLE_BLUETOOTH){
Toast.makeText(this,"蓝牙已经开启",Toast.LENGTH_SHORT).show();
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onDeviceSeleted(BluetoothDevice bluetoothDevice) {
Log.i("123", "onDeviceSeleted: ");
mmmDevice=bluetoothDevice;
mService=new BluetoothService(MainActivity.this,mHandler);
gogogo();
}
//开始连接蓝牙。
private void gogogo(){
if(mService!=null){
if(mService.getState() ==BluetoothService.STATE_NONE){
mService.start();
Log.i("123", "onDeviceSeleted: start!");
mService.connect(mmmDevice);
}
}
}
}
public class BluetoothService {
private static final String TAG = "BluetoothChatService";
private BluetoothAdapter mAdapter;
private Handler mHandler;
private int mState;
private AcceptThread mAccpetThread;
private ConnectThread mConnectThread;
private static final String NAME_SECURE = "BluetoothChatSecure";
private static final UUID MY_UUID_SECURE =
UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");
public static final int STATE_NONE = 0; // we're doing nothing
public static final int STATE_LISTEN = 1; // now listening for incoming connections
public static final int STATE_CONNECTING = 2; // now initiating an outgoing connection
public static final int STATE_CONNECTED = 3; // now connected to a remote device
public BluetoothService(Context context,Handler handler){
mAdapter=BluetoothAdapter.getDefaultAdapter();
mHandler=handler;
mState=STATE_NONE;
}
public void start(){
Log.i("123","start start");
if(mAccpetThread==null){
mAccpetThread=new AcceptThread(true);
mAccpetThread.start();
}
}
public void connect(BluetoothDevice device){
Log.i("123","connect connect");
mConnectThread=new ConnectThread(device);
mConnectThread.start();
setState(STATE_CONNECTING);
}
public void setState(int mState) {
this.mState = mState;
}
public int getState() {
return mState;
}
private class AcceptThread extends Thread {
//Local server socket
private final BluetoothServerSocket mServerSocket;
public AcceptThread(boolean secure) {
Log.i("123","AcceptThread 构造");
BluetoothServerSocket tmp=null;
try {
tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME_SECURE, MY_UUID_SECURE);
} catch (IOException e) {
Log.e(TAG, "AcceptThread: ",e );
}
mServerSocket=tmp;
}
public void run(){
Log.i("123","AcceptThread Run");
BluetoothSocket socket=null;
while (mState!=STATE_CONNECTED){
Log.i("123","mState!=STATE_CONNECTED ");
try {
socket=mServerSocket.accept();
} catch (IOException e) {
Log.e(TAG, "accept() failed",e );
break;
}
//如果连接;
if (socket!=null) {
Log.i("123","连接成功啊!!! ");
}
}
}
}
private class ConnectThread extends Thread{
private final BluetoothSocket mSocket;
private final BluetoothDevice mDevice;
public ConnectThread(BluetoothDevice device){
Log.i("123","ConnectThread 构造");
mDevice=device;
BluetoothSocket tmp=null;
try {
tmp = device.createRfcommSocketToServiceRecord(MY_UUID_SECURE);
} catch (IOException e1) {
e1.printStackTrace();
}
mSocket=tmp;
}
public void run(){
Message msg=new Message();
msg.what=Constants.MESSAGE_STATE_CHANGE;
msg.arg1=STATE_CONNECTING;
mHandler.sendMessage(msg);
setState(STATE_CONNECTING);
Log.i("123","ConnectThread Run");
mAdapter.cancelDiscovery();
try {
mSocket.connect();
} catch (IOException e) {
try {
mSocket.close();
Log.i("123","ConnectThread close");
} catch (IOException e1) {
Log.e(TAG, "unable to close() socket during connection failure",e );
}
return;
}
}
}
}14
收起
正在回答 回答被采纳积分+1
3回答
irista23
2018-05-28 11:59:55
你的真机是Android6.0+吗?如果是添加下定位权限:
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
if(Build.VERSION.SDK_INT >= 23){
//6.0以上设备
int checkCallPhonePermission = checkSelfPermission(Manifest.permission.
ACCESS_COARSE_LOCATION);
if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.
ACCESS_COARSE_LOCATION}, REQUEST_PERMISSION_LOCATION);
return;
}
}
Android数据通信开发与应用2018版
- 参与学习 人
- 提交作业 147 份
- 解答问题 687 个
本专题介绍了Android开发核心组件:广播、服务及全局应用。教会你如何使用AIDL、Thread、Socket、蓝牙解决进程线程间通信问题。利用Glide等实现异步加载及NDK原生代码开发。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星