English 中文(简体)
连接甲型 device(BluetoothSocket)
原标题:Connecting to paired bluetooth device (BluetoothSocket) in android 2.1

我正试图与一个配对的<条码>蓝色/条码>装置(巴科达条码阅读器)连接起来。 我从市场尝试了<代码>GetBlueDemo,从中转读。

我撰写了我自己对概念的证明,但我只是在试图与装置连接时不断犯过错。

08-23 14:39:28.635: DEBUG/BluetoothTest(19238): Could not connect to socket
08-23 14:39:28.635: DEBUG/BluetoothTest(19238): java.io.IOException: socket failed to connect
08-23 14:39:28.635: DEBUG/BluetoothTest(19238):     at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:255)
08-23 14:39:28.635: DEBUG/BluetoothTest(19238):     at org.me.barcodetest.MainActivity$ConnectRunnable.run(MainActivity.java:211)
08-23 14:39:28.635: DEBUG/BluetoothTest(19238):     at java.lang.Thread.run(Thread.java:1102)

任何建议,一是错做什么?

package org.me.barcodetest;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Set;
import java.util.UUID;

public class MainActivity extends Activity {

private static final int REQUEST_ENABLE_BT = 2;
private BluetoothAdapter bluetoothAdapter;
private UUID applicationUUID = java.util.UUID.randomUUID();
private static final String logTag = "BluetoothTest";

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (bluetoothAdapter == null) {
        Log.d(logTag, "Could not get bluetooth adapter");
        return;
    }
    searchForDevices();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_ENABLE_BT) {
        if (requestCode == RESULT_OK) {
            Log.d("BluetoothTest", "bluetooth enabled");
            searchForDevices();
        } else {
            Log.d("BluetoothTest", "Could not enable bluetooth device");
        }
    }

}

public void lineReadFromBluetoothDevice(String line) {
    Log.d(logTag, "Mottok: " + line);
}

private void searchForDevices() {
    if (bluetoothAdapter.isEnabled()) {
        Set<BluetoothDevice> devicesAvailable = bluetoothAdapter.getBondedDevices();
        if (devicesAvailable.isEmpty()) {
            informUserNoDevicesPaired();
        } else {
            askUserToPickDeviceToUse(devicesAvailable);
        }
    } else {
        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
    }
}

private void askUserToPickDeviceToUse(Set<BluetoothDevice> devicesAvailable) {
    final ListView view = new ListView(this);
    view.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    ArrayAdapter<BluetoothDevice> adapter =
            new ArrayAdapter(this, R.layout.devicesavailabletextview, devicesAvailable.toArray(new BluetoothDevice[devicesAvailable.size()])) {

                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
                    TextView view = (TextView) super.getView(position, convertView, parent);
                    BluetoothDevice bluetoothDevice = (BluetoothDevice) getItem(position);
                    view.setText(bluetoothDevice.getName() + " : " + bluetoothDevice.getAddress());
                    return view;
                }
            };
    view.setAdapter(adapter);
    view.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
            pairToDevice((BluetoothDevice) view.getItemAtPosition(position));
        }
    });


    Dialog dialog = new Dialog(this);
    dialog.setContentView(view);
    dialog.setCancelable(true);
    dialog.show();

}

private void informUserNoDevicesPaired() {
    Builder dialogBuilder = new AlertDialog.Builder(this);
    dialogBuilder.setMessage("Ingen "Paired" enheter");
    dialogBuilder.setPositiveButton("Søk", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int arg1) {
            dialog.dismiss();

        }
    });
    dialogBuilder.setOnCancelListener(new OnCancelListener() {

        public void onCancel(DialogInterface dialog) {
            dialog.dismiss();
            finish();
        }
    });
    dialogBuilder.show();
}

private void showError(String message) {
    Builder dialogBuilder = new AlertDialog.Builder(this);
    dialogBuilder.setMessage("Det oppstod en feil i programmet:

" + message);
    dialogBuilder.setOnCancelListener(new OnCancelListener() {

        public void onCancel(DialogInterface dialog) {
            dialog.dismiss();
            finish();
        }
    });
    dialogBuilder.show();
}

private void pairToDevice(BluetoothDevice bluetoothDevice) {
    openSocket(bluetoothDevice);
}

private void openSocket(BluetoothDevice bluetoothDevice) {
    try {

        final ProgressDialog dialog = new ProgressDialog(this);
        final ConnectRunnable connector = new ConnectRunnable(bluetoothDevice, dialog);
        dialog.show(this, "Kobler til", "Koblier til " + bluetoothDevice.getName() + " : " + bluetoothDevice.getAddress(),
                true, true,
                new OnCancelListener() {

                    public void onCancel(DialogInterface dialog) {
                        connector.cancel();
                    }
                });

        new Thread(connector).start();

    } catch (IOException ex) {
        Log.d(logTag, "Could not open bluetooth socket", ex);
        showError("Kunne ikke åpne socket grunnet feil: " + ex.getMessage());
    }
}

private void closeSocket(BluetoothSocket openSocket) {
    try {
        openSocket.close();
    } catch (IOException ex) {
        Log.d(logTag, "Could not close exisiting socket", ex);
    }
}

private void startListeningForInput(BluetoothSocket socket) {
    new Thread(new InputReader(socket)).start();

}

private void dismissDialog(final Dialog dialog) {
    runOnUiThread(new Runnable() {

        public void run() {
            dialog.dismiss();
        }
    });
}

private class ConnectRunnable implements Runnable {

    private final ProgressDialog dialog;
    private final BluetoothSocket socket;

    public ConnectRunnable(BluetoothDevice device, ProgressDialog dialog) throws IOException {
        socket = device.createRfcommSocketToServiceRecord(applicationUUID);
        this.dialog = dialog;
    }

    public void run() {
        try {
            bluetoothAdapter.cancelDiscovery();
            socket.connect();
        } catch (IOException connectException) {
            Log.d(logTag, "Could not connect to socket", connectException);
            closeSocket(socket);
            return;
        }
        startListeningForInput(socket);
        dismissDialog(dialog);
    }

    public void cancel() {
        try {
            socket.close();
        } catch (IOException e) {
            Log.d(logTag, "Canceled connection", e);
        }
    }
}

private class InputReader implements Runnable {

    private final BluetoothSocket socket;

    public InputReader(BluetoothSocket socket) {
        this.socket = socket;

    }

    @Override
    public void run() {
        try {
            final InputStream input = socket.getInputStream();
            final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(input, "UTF-8"));
            String line;

            while ((line = bufferedReader.readLine()) != null) {
                lineReadFromBluetoothDevice(line);
            }
        } catch (IOException ex) {
            showError("Mistet forbindelsen: " + ex.getMessage());
        }
    }

    public void cancel() {
        try {
            socket.close();
        } catch (IOException e) {
        }
    }
}
}



     <uses-permission android:name="android.permission.BLUETOOTH" />
     <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

现有设备:

<?xml version="1.0" encoding="UTF-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
</TextView>
问题回答

问题在于我所熟知,这只是一个ui子,知道它来自何地,但必须是“01101-0000-1000-8000-00805F9B34FB”

条码扫描器使用SPP程序,因此,你必须利用SPP UUID与它连接。





相关问题
Android - ListView fling gesture triggers context menu

I m relatively new to Android development. I m developing an app with a ListView. I ve followed the info in #1338475 and have my app recognizing the fling gesture, but after the gesture is complete, ...

AsyncTask and error handling on Android

I m converting my code from using Handler to AsyncTask. The latter is great at what it does - asynchronous updates and handling of results in the main UI thread. What s unclear to me is how to handle ...

Android intent filter for a particular file extension?

I want to be able to download a file with a particular extension from the net, and have it passed to my application to deal with it, but I haven t been able to figure out the intent filter. The ...

Android & Web: What is the equivalent style for the web?

I am quite impressed by the workflow I follow when developing Android applications: Define a layout in an xml file and then write all the code in a code-behind style. Is there an equivalent style for ...

TiledLayer equivalent in Android [duplicate]

To draw landscapes, backgrounds with patterns etc, we used TiledLayer in J2ME. Is there an android counterpart for that. Does android provide an option to set such tiled patterns in the layout XML?

Using Repo with Msysgit

When following the Android Open Source Project instructions on installing repo for use with Git, after running the repo init command, I run into this error: /c/Users/Andrew Rabon/bin/repo: line ...

Android "single top" launch mode and onNewIntent method

I read in the Android documentation that by setting my Activity s launchMode property to singleTop OR by adding the FLAG_ACTIVITY_SINGLE_TOP flag to my Intent, that calling startActivity(intent) would ...

From Web Development to Android Development

I have pretty good skills in PHP , Mysql and Javascript for a junior developer. If I wanted to try my hand as Android Development do you think I might find it tough ? Also what new languages would I ...

热门标签