ฟังก์ชั่น Bluetooth ทั่วไปในการส่งข้อมูลโดยใช้ BluetoothDevice ใน Android

ฉันกำลังพัฒนาแอปพลิเคชันบลูทูธใน Android โดยก่อนอื่นฉันต้องสแกนอุปกรณ์บลูทูธที่มีอยู่แล้วจึงเชื่อมต่ออุปกรณ์เหล่านั้น หลังจากทำการเชื่อมต่อแล้ว ฉันจะต้องส่งข้อมูลให้พวกเขา ฉันได้ทำจนถึงการเชื่อมต่อ แต่ฉันไม่พบฟังก์ชันทั่วไปที่ส่งข้อมูลไปยังอุปกรณ์ที่เชื่อมต่อ ฉันต้องใช้ฟังก์ชันนี้หลายครั้งในแอปพลิเคชันของฉัน ด้านล่างนี้คือรหัสของฉันสำหรับการเชื่อมต่อ...โปรดช่วยฉันด้วย...

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;
import java.util.Set;
import java.util.TimeZone;
import java.util.UUID;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.PorterDuff.Mode;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

@SuppressLint("NewApi")
public class Main extends Activity implements Runnable 
{
    protected static final String TAG = "TAG";
    private static final int REQUEST_CONNECT_DEVICE = 1;
    private static final int REQUEST_ENABLE_BT = 2;
    Button mScan;
    BluetoothAdapter mBluetoothAdapter;
    private UUID applicationUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
    private ProgressDialog mBluetoothConnectProgressDialog;
    private BluetoothSocket mBluetoothSocket;
    BluetoothDevice mBluetoothDevice;

    String MESSAGEPASS;

    @Override
    public void onCreate(Bundle mSavedInstanceState) 
    {
        super.onCreate(mSavedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);
        mScan = (Button) findViewById(R.id.Scan);
        mScan.setOnClickListener(new View.OnClickListener() 
        {
            public void onClick(View mView) 
            {
                mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
                if (mBluetoothAdapter == null) 
                {
                    Toast.makeText(Main.this, "Message1", 2000).show();
                } 
                else 
                {
                    if (!mBluetoothAdapter.isEnabled()) 
                    {
                        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
                    } 
                    else 
                    {
                        ListPairedDevices();
                        Intent connectIntent = new Intent(Main.this, DeviceListActivity.class);
                        startActivityForResult(connectIntent, REQUEST_CONNECT_DEVICE);
                    }
                }
            }
        });

    }

    public void onActivityResult(int mRequestCode, int mResultCode, Intent mDataIntent) 
    {
        super.onActivityResult(mRequestCode, mResultCode, mDataIntent);

        switch (mRequestCode) 
        {
            case REQUEST_CONNECT_DEVICE:
                if (mResultCode == Activity.RESULT_OK) 
                {
                    Bundle mExtra = mDataIntent.getExtras();
                    String mDeviceAddress = mExtra.getString("DeviceAddress");
                    Log.v(TAG, "Coming incoming address " + mDeviceAddress);
                    mBluetoothDevice = mBluetoothAdapter.getRemoteDevice(mDeviceAddress);
                    mBluetoothConnectProgressDialog = ProgressDialog.show(this, "Connecting...", mBluetoothDevice.getName() + " : " + mBluetoothDevice.getAddress(), true, false);

                    Thread mBlutoothConnectThread = new Thread(this);
                    mBlutoothConnectThread.start();



                    //pairToDevice(mBluetoothDevice); This method is replaced by progress dialog with thread


                }
                break;

            case REQUEST_ENABLE_BT:
                if (mResultCode == Activity.RESULT_OK) 
                {
                    ListPairedDevices();
                    Intent connectIntent = new Intent(Main.this, DeviceListActivity.class);
                    startActivityForResult(connectIntent, REQUEST_CONNECT_DEVICE);
                } 
                else 
                {
                    Toast.makeText(Main.this, "Message", 2000).show();
                }
                break;
        }
    }

    private void ListPairedDevices() 
    {
        Set<BluetoothDevice> mPairedDevices = mBluetoothAdapter.getBondedDevices();
        if (mPairedDevices.size() > 0) 
        {
            for (BluetoothDevice mDevice : mPairedDevices) 
            {
                Log.v(TAG, "PairedDevices: " + mDevice.getName() + " " + mDevice.getAddress());
            }
        }
    }

    public void run() 
    {
        try 
        {
            mBluetoothSocket = mBluetoothDevice.createRfcommSocketToServiceRecord(applicationUUID);
            mBluetoothAdapter.cancelDiscovery();
            mBluetoothSocket.connect();
            mHandler.sendEmptyMessage(0);
        }
        catch (IOException eConnectException) 
        {
            Log.d(TAG, "CouldNotConnectToSocket", eConnectException);
             closeSocket(mBluetoothSocket);
             return;
        }
    }

    private void closeSocket(BluetoothSocket nOpenSocket) 
    {
        try 
        {
            nOpenSocket.close();
            Log.d(TAG, "SocketClosed");
        } 
        catch (IOException ex) 
        {
            Log.d(TAG, "CouldNotCloseSocket");
        }
    }

    private Handler mHandler = new Handler() 
    {
        @Override
        public void handleMessage(Message msg) 
        {
            mBluetoothConnectProgressDialog.dismiss();
            Toast.makeText(Main.this, "Device Connected", 5000).show();

            Intent in = new Intent(getBaseContext(), Option.class);
            startActivity(in);

        }
    };



}

person Looking Forward    schedule 27.02.2013    source แหล่งที่มา


คำตอบ (2)


คุณต้องใช้ Bluetooth เป็นบริการพื้นหลังเพื่อที่จะทำงานในพื้นหลังของแอปพลิเคชันและคุณสามารถเข้าถึงได้จากกิจกรรมใด ๆ จากแอปพลิเคชัน ลองดูสิ

person Kapil Vats    schedule 27.02.2013
comment
เฮ้ ฉันเจอสิ่งนี้แล้ว แต่ฉันไม่รู้ว่าจะส่งที่อยู่ MAC ของอุปกรณ์ไปในกิจกรรมอื่นได้อย่างไร.. - person Looking Forward; 27.02.2013
comment
โมฆะส่วนตัว sendDataToPairedDevice (ข้อความสตริง อุปกรณ์ BluetoothDevice) { ไบต์ [] toSend = message.getBytes (); ลอง { BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(applicationUUID); OutputStream mmOutStream = socket.getOutputStream(); mmOutStream.write(ส่ง); // ข้อมูลของคุณถูกส่งไปยังอุปกรณ์ที่จับคู่ที่เชื่อมต่อ BT เพลิดเพลิน } catch (IOException e) { Log.e (TAG, ข้อยกเว้นระหว่างการเขียน, e); } } - person Looking Forward; 27.02.2013

ฉันได้ทดลองใช้บลูทูธเล็กน้อย และวิธีที่ง่ายที่สุดในการใช้ซ็อกเก็ตทั่วไประหว่างหลายๆ กิจกรรมคือการแชร์โดยใช้ตัวแปรส่วนกลาง ตรวจสอบสิ่งนี้: วิธีส่งผ่าน Bluetooth ซ็อกเก็ตไปยังกิจกรรมอื่นโดยใช้อินเทอร์เฟซแอปพลิเคชัน

person Jonatan    schedule 06.09.2013