2013-08-28 12 views
8

Es ist bereits gefragt, aber ich habe keine Lösung gefunden. Für Bluetooth-Anwendung verwende ich die bluetoothShare.class.Bluetooth sendet keine Datei an ein anderes Gerät

Meine Quellcode, um die Datei an das Zielgerät

MainActvity.class zum Senden:

Set<BluetoothDevice> devices = btAdapter 
          .getBondedDevices(); 
        final String btDeviceName = selected_deviceName; 
        BluetoothDevice device = null; 

        for (BluetoothDevice itDevice : devices) { 
         if (btDeviceName.equals(itDevice.getName())) { 
          device = itDevice; 
         } 
        } 

        if (device != null) { 

         ContentValues values = new ContentValues(); 
         values.put(BluetoothShare.URI, uri.toString()); 
         values.put(BluetoothShare.MIMETYPE, "image/jpeg"); 
         values.put(BluetoothShare.DESTINATION, 
           device.getAddress()); 
         values.put(BluetoothShare.DIRECTION, 
           BluetoothShare.DIRECTION_OUTBOUND); 
         Long ts = System.currentTimeMillis(); 
         values.put(BluetoothShare.TIMESTAMP, ts); 
         final Uri contentUri = getApplicationContext() 
           .getContentResolver().insert(
             BluetoothShare.CONTENT_URI, values); 
         Log.v(TAG, "Insert contentUri: " + contentUri 
           + " to device: " + device.getName()); 
         Toast.makeText(getApplicationContext(), "Success", 
           Toast.LENGTH_LONG).show(); 
        } else { 
         textStatus 
           .setText("Bluetooth remote device not found"); 
        } 
       } else { 
        textStatus.setText("Bluetooth not activated"); 
       } 
      } 

      else { 
       Toast.makeText(getApplicationContext(), "No devices found", 
         Toast.LENGTH_LONG).show(); 
      } 

und der blueToothShare.class:

package process.bluetooth.sendfile.opp; 

import android.net.Uri; 
import android.provider.BaseColumns; 


public final class BluetoothShare implements BaseColumns { 
private BluetoothShare() { 
} 

public static final String PERMISSION_ACCESS = "android.permission.ACCESS_BLUETOOTH_SHARE"; 

public static final Uri CONTENT_URI = Uri 
     .parse("content://com.android.bluetooth.opp/btopp"); 

public static final String TRANSFER_COMPLETED_ACTION = "android.btopp.intent.action.TRANSFER_COMPLETE"; 

public static final String INCOMING_FILE_CONFIRMATION_REQUEST_ACTION = "android.btopp.intent.action.INCOMING_FILE_NOTIFICATION"; 

public static final String USER_CONFIRMATION_TIMEOUT_ACTION = "android.btopp.intent.action.USER_CONFIRMATION_TIMEOUT"; 

public static final String URI = "uri"; 

public static final String FILENAME_HINT = "hint"; 

public static final String _DATA = "_data"; 

public static final String MIMETYPE = "mimetype"; 

public static final String DIRECTION = "direction"; 

public static final String DESTINATION = "destination"; 

public static final String VISIBILITY = "visibility"; 

public static final String USER_CONFIRMATION = "confirm"; 

public static final String STATUS = "status"; 

public static final String TOTAL_BYTES = "total_bytes"; 

public static final String CURRENT_BYTES = "current_bytes"; 

public static final String TIMESTAMP = "timestamp"; 

public static final int DIRECTION_OUTBOUND = 0; 

public static final int DIRECTION_INBOUND = 1; 

public static final int USER_CONFIRMATION_PENDING = 0; 

public static final int USER_CONFIRMATION_CONFIRMED = 1; 

public static final int USER_CONFIRMATION_AUTO_CONFIRMED = 2; 

public static final int USER_CONFIRMATION_DENIED = 3; 

public static final int USER_CONFIRMATION_TIMEOUT = 4; 

public static final int VISIBILITY_VISIBLE = 0; 

public static final int VISIBILITY_HIDDEN = 1; 

public static boolean isStatusInformational(int status) { 
    return (status >= 100 && status < 200); 
} 

public static boolean isStatusSuspended(int status) { 
    return (status == STATUS_PENDING); 
} 

public static boolean isStatusSuccess(int status) { 
    return (status >= 200 && status < 300); 
} 

public static boolean isStatusError(int status) { 
    return (status >= 400 && status < 600); 
} 

public static boolean isStatusClientError(int status) { 
    return (status >= 400 && status < 500); 
} 

public static boolean isStatusServerError(int status) { 
    return (status >= 500 && status < 600); 
} 

public static boolean isStatusCompleted(int status) { 
    return (status >= 200 && status < 300) 
      || (status >= 400 && status < 600); 
} 

public static final int STATUS_PENDING = 190; 

public static final int STATUS_RUNNING = 192; 

public static final int STATUS_SUCCESS = 200; 

public static final int STATUS_BAD_REQUEST = 400; 

public static final int STATUS_FORBIDDEN = 403; 

public static final int STATUS_NOT_ACCEPTABLE = 406; 

public static final int STATUS_LENGTH_REQUIRED = 411; 

public static final int STATUS_PRECONDITION_FAILED = 412; 

public static final int STATUS_CANCELED = 490; 

public static final int STATUS_UNKNOWN_ERROR = 491; 

public static final int STATUS_FILE_ERROR = 492; 

public static final int STATUS_ERROR_NO_SDCARD = 493; 

public static final int STATUS_ERROR_SDCARD_FULL = 494; 

public static final int STATUS_UNHANDLED_OBEX_CODE = 495; 

public static final int STATUS_OBEX_DATA_ERROR = 496; 

public static final int STATUS_CONNECTION_ERROR = 497; 

} 

Antwort

6

BluetoothShare-Klasse nicht unterstützt Android 4.1 und höher. v 2.2/2.3 über bluetoothShare Klasse die Datei nicht senden können Sie die folgende Absicht Codierung verwenden Datei in Android-Version 4.1 und höher

Intent intent = new Intent(); 
    intent.setAction(Intent.ACTION_SEND); 
    intent.setComponent(new ComponentName(
     "com.android.bluetooth", 
     "com.android.bluetooth.opp.BluetoothOppLauncherActivity")); 
    intent.setType("image/jpeg"); 
    file = new File(filepath); 
    intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file)); 
    startActivity(intent); 

und auch einige Geräte in Android zu senden.

2

Vielleicht können Sie eine andere Lösung versuchen, mit BufferedWriter und BufferedReader. Hier

ist ein snipped Code:

  BluetoothDevice mmDevice; 
      Set<BluetoothDevice> mBluetoothAdapter; 

      BluetoothAdapter bAdapter = BluetoothAdapter 
        .getDefaultAdapter(); 
      mBluetoothAdapter = bAdapter.getBondedDevices(); 

      for (BluetoothDevice bc : mBluetoothAdapter) { 
       if (bc.getName().indexOf("name_of_bluetoothdevide") != -1) { 
        UUID uuid = UUID 
          .fromString("00001101-0000-1000-8000-00805F9B34FB"); // Standard 
                        // SerialPortService 
                        // ID 
        mmDevice = bc; 
        BluetoothSocket mmSocket = mmDevice 
          .createInsecureRfcommSocketToServiceRecord(uuid); 
        bAdapter.cancelDiscovery(); 
        mmSocket.connect(); 
        BufferedWriter Writer = new BufferedWriter(
          new OutputStreamWriter(
            mmSocket.getOutputStream())); 
        Writer.write("Bluetooth connected!"); 
        Writer.flush(); 

        app.setmSocket(mmSocket); 

        break; 
       } 
      } 

Und zum Lesen:

BufferedReader Reader = new BufferedReader(
        new InputStreamReader(mmSocket.getInputStream())); 
      receivedMsg = Reader.readLine(); 

Hoffe, es kann Ihnen helfen.

+0

Vielen Dank für Ihre Antwort .. app.setmSocket (mmSocket); Was ist App .. – Arut

+0

Ich denke, Ihr Code ist für die Verbindung der Geräte richtig. – Arut

+0

vergessen app.setmSocket (mmSocket); .. das ist nur für mich. –

1

könnte man in gewisser Weise Vielleicht

... Hilfe bei der Firmware von MediaTek
private void sendData(String message) { 
    byte[] msgBuffer = message.getBytes(); 
    Log.d(TAG, "...Sending data: " + message + "..."); 
    try { 
     outStream.write(msgBuffer); 
    } catch (IOException e) { 
     String msg = "In onResume() and an exception occurred during write: " + e.getMessage(); 
     if (address.equals("00:00:00:00:00:00")) 
      msg = msg + ".\n\nUpdate your server address from 00:00:00:00:00:00 to the correct address on java code"; 
     msg = msg + ".\n\nCheck that the SPP UUID: " + MY_UUID.toString() + " exists on server.\n\n"; 
     errorExit("Fatal Error", msg);  
    } 
} 
1

Dieser Code funktioniert. Getestet auf Android 4.0.4. Sendet die Datei, ohne etwas von dem Benutzer zu fragen

public boolean SendFileViaBluetoothOPP(String file_path, String destinationMAC){ 
    BluetoothAdapter btadapter = BluetoothAdapter.getDefaultAdapter(); 
    if(btadapter == null) 
     return false; 

    BluetoothDevice btdev = btadapter.getRemoteDevice(destinationMAC); 
    if(btdev == null) 
     return false; 

    Uri uri = Uri.fromFile(new File(file_path)); 

    Intent shareIntent = new Intent(Intent.ACTION_SEND) 
         .putExtra(Intent.EXTRA_STREAM, uri) 
         .setType("application/zip"); 

    List<ResolveInfo> resolvedActivities = getPackageManager().queryIntentActivities(shareIntent, 0); 

    boolean found = false; 
    for(ResolveInfo actInfo: resolvedActivities){ 
     if(actInfo.activityInfo.packageName.equals("com.mediatek.bluetooth")) 
     {     
      shareIntent.setComponent(new ComponentName(actInfo.activityInfo.packageName, actInfo.activityInfo.name)); 
      shareIntent.putExtra("com.mediatek.bluetooth.sharegateway.extra.DEVICE_ADDRESS", btdev); 
      shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 
      found = true; 
      break; 
     } 
    } 

    if(found){ 
     startActivity(shareIntent); 
     return true; 
    } 

    return false; 
} 

Auf älteres Telefon von MediaTek mit Android 2.2.1 dieser Code BluetoothDevicePicker startet den Vorgang abzuschließen.

Verwandte Themen