3

Android Bluetooth Chat サンプル アプリケーションを変更して、画像を送信できるようにしました。これは最初の画像で問題ありません。送信され、正しく表示されます。別の画像を送信しようとすると、新しい画像を 1 回だけ送信する必要があるときに、前の画像を 20 回以上送信しているようです。oef を使用してみましたが、役に立ちませんでした。

これは画像を送信します:

        Bitmap icon = BitmapFactory.decodeResource(context.getResources(), R.drawable.rc_a);

        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        icon.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
        byte[] image = bytes.toByteArray();

        mConnection.write(image);

これは ConnectedThread にあります。

    public void run() {
        byte[] buffer = new byte[1024];
        byte[] imgBuffer = new byte[1024 * 1024];
        int pos = 0;

        // Keep listening to the InputStream while connected
        while (true) {
            try {
                // Read from the InputStream
                int bytes = mmInStream.read(buffer);
                System.arraycopy(buffer,0,imgBuffer,pos,bytes);
                pos += bytes;

                mHandler.obtainMessage(BtoothSetupActivity.MESSAGE_READ,
                        pos, -1, imgBuffer).sendToTarget();

            } catch (IOException e) {
                connectionLost();
                break;
            }
        }
    }

これにより、データが読み戻されます。

    case MESSAGE_READ:
    byte[] readBuf = (byte[]) msg.obj;
    Bitmap bmp = BitmapFactory.decodeByteArray(readBuf, 0, msg.arg1);
4

1 に答える 1

2

ファイルを転送するために、ACTION_SENDインテントを使用して明示的に呼び出すことができます。

を使用ACTION_SENDすると、送信するファイルの種類を処理できるアプリケーションのメニューがポップアップ表示されます。ユーザーはそこから Bluetooth を選択し、次にファイルを送信するデバイスを選択する必要があります。

File sourceFile = new File("//mnt/sdcard/file.apk"); 
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
Intent.setType("image/jpeg"); 
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(sourceFile));
startActivity(intent);

追加のヘルプ:

于 2013-03-15T19:18:47.987 に答える