1

我是 android 开发的新手。我创建了一个蓝牙应用程序,用于从我的应用程序将图像发送到另一台设备。首先,我从图库加载图像并使用此 uri 将该图像发送到远程设备。然后使用搜索按钮搜索在一个列表视图中可见的可能性设备。我的问题是当我单击列表视图(远程设备地址)时,远程设备无法配对,也无法发送图像。请帮助我,谢谢...`

我的 xml 布局文件:

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <Button
    android:id="@+id/button_search"
    android:text="Search for listener"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_above="@id/text_message"
    />
     <Button
            android:id="@+id/btnidOpenGallery"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_above="@+id/button_listen"
            android:text="OpenGallery" />


    <ListView
    android:id="@+id/list_discovered"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_above="@id/btnidOpenGallery"
    android:layout_alignParentTop="true"
    />

    </RelativeLayout>

我的主要活动:

@Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            btnOpenimage=(Button)findViewById(R.id.btnidOpenGallery);
            OpenImage();
            foundDevices = new ArrayList<BluetoothDevice>();
            configureBluetooth();
            setupListView();
            }



    private void configureBluetooth() {
            bluetooth = BluetoothAdapter.getDefaultAdapter();
        }

    private void OpenImage() {
            btnOpenimage.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent();
                        intent.setType("image/*");
                        intent.setAction(Intent.ACTION_PICK);
                        startActivityForResult(Intent.createChooser(intent,
                                "Select Picture"), SELECT_PICTURE);
                    }
                });
        }

    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode==2) {
                    selectedImageUri = data.getData();

                }
             }


    private void setupSearchButton() {
            Button searchButton = (Button) findViewById(R.id.button_search);

            searchButton.setOnClickListener(new OnClickListener() {
                public void onClick(View view) {
                    registerReceiver(discoveryResult, new IntentFilter(
                            BluetoothDevice.ACTION_FOUND));

                    if (!bluetooth.isDiscovering()) {
                        foundDevices.clear();
                        bluetooth.startDiscovery();
                    }
                }
            });
        }

        private void setupListView() {
            list = (ListView) findViewById(R.id.list_discovered);
            aa = new ArrayAdapter<BluetoothDevice>(this,
                    android.R.layout.simple_list_item_1, foundDevices);
            list.setAdapter(aa);

            list.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> arg0, View view, int index,
                        long arg3) {
                    AsyncTask<Integer, Void, Void> connectTask = new AsyncTask<Integer, Void, Void>() {
                        @Override
                        protected Void doInBackground(Integer... params) {
                            try {
                                BluetoothDevice device = foundDevices
                                        .get(params[0]);
                                socket = device
                                        .createRfcommSocketToServiceRecord(uuid);
                                socket.connect();
                            } catch (IOException e) {
                                Log.d("BLUETOOTH_CLIENT", e.getMessage());
                            }
                            return null;
                        }

                        @Override
                        protected void onPostExecute(Void result) {
                            //switchUI();
                            try {
                                sendFile(selectedImageUri, socket);
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    };
                    connectTask.execute(index);
                }
            });
        }



        public void sendFile(Uri uri, BluetoothSocket bs) throws IOException {
            BufferedInputStream bis = new BufferedInputStream(getContentResolver().openInputStream(uri));
            OutputStream os = bs.getOutputStream();
        try {
            int bufferSize = 1024;
            byte[] buffer = new byte[bufferSize];

            // we need to know how may bytes were read to write them to the byteBuffer
            int len = 0;
            while ((len = bis.read(buffer)) != -1) {
                os.write(buffer, 0, len);
            }
        } finally {
            bis.close();
            os.flush();
            os.close();
            bs.close();
        }
    } 
4

0 回答 0