Android Bluetooth 文件接收路径修改方法

本文介绍了如何修改Android蓝牙应用的默认文件接收路径。关键在于编辑`BluetoothOppReceiveFileInfo.java`文件,特别是涉及到外部存储和子目录设置的部分。确保修改后的路径合法且与`sDesiredStoragePath`保持一致,以防止文件接收失败。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

修改文件:

packages/apps/Bluetooth/src/com/android/bluetooth/opp/BluetoothOppReceiveFileInfo.java


相关代码片段:

    public static BluetoothOppReceiveFileInfo generateFileInfo(Context context, int id) {

        ContentResolver contentResolver = context.getContentResolver();
        Uri contentUri = Uri.parse(BluetoothShare.CONTENT_URI + "/" + id);
        String filename = null, hint = null, mimeType = null;
        long length = 0;
        Cursor metadataCursor = null;
        try {
            metadataCursor = contentResolver.query(contentUri, new String[] {
                BluetoothShare.FILENAME_HINT, BluetoothShare.TOTAL_BYTES, BluetoothShare.MIMETYPE
                }, null, null, null);
        } catch (SQLiteException e) {
            if (metadataCursor != null) {
                metadataCursor.close();
            }
            metadataCursor = null;
            Log.e(Constants.TAG, "generateFileInfo: " + e);
        } catch (CursorWindowAllocationException e) {
            metadataCursor = null;
            Log.e(Constants.TAG, "generateFileInfo: " + e);
        }

        if (metadataCursor != null) {
            try {
                if (metadataCursor.moveToFirst()) {
                    hint = metadataCursor.getString(0);
                    length = metadataCursor.getLong(1);
                    mimeType = metadataCursor.getString(2);
                }
            } finally {
                metadataCursor.close();
                i
### 如何在 Android 设备上通过蓝牙接收文件 要在 Android 上实现蓝牙文件传输功能,可以利用 Android 提供的 `BluetoothAdapter` 和 `BluetoothServerSocket` API 来建立连接并处理数据流。以下是具体方法: #### 创建 BluetoothServerSocket 并监听传入请求 为了能够接收到其他设备发送过来的数据,需要创建一个服务器套接字 (`BluetoothServerSocket`) 并等待客户端发起连接。 ```java import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothServerSocket; import android.bluetooth.BluetoothSocket; public class BluetoothFileReceiver { private static final String NAME = "BluetoothFileTransfer"; private static final UUID MY_UUID = UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66"); public void startListening() { try { BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (!bluetoothAdapter.isEnabled()) { throw new Exception("Bluetooth is not enabled"); } BluetoothServerSocket serverSocket = bluetoothAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID); while (true) { // Keep listening until exception occurs or thread interrupted. BluetoothSocket socket = serverSocket.accept(); // This call blocks until connection established. InputStream inputStream = socket.getInputStream(); byte[] buffer = new byte[1024]; int bytes; FileOutputStream outputStream = new FileOutputStream("/path/to/save/file"); // Specify path where file should be saved. while ((bytes = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytes); } outputStream.close(); inputStream.close(); socket.close(); } } catch (Exception e) { System.out.println(e.getMessage()); } } } ``` 上述代码片段展示了如何设置一个简单的蓝牙服务端来接受来自另一台设备的文件输入流,并将其保存到指定路径下[^1]。 #### 配置权限和适配器状态检查 确保应用具有必要的权限声明以及运行时许可获取逻辑。还需要确认当前用户的手机已开启蓝牙支持并且可见给附近其它装置发现它。 在清单文件中加入如下配置项: ```xml <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- Required since Android M --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> ``` 对于 Android 6.0 及以上版本还需动态申请位置访问权能因为扫描周边可用蓝牙设备需要用到定位服务[^2]。 #### 处理多线程操作与资源释放 考虑到网络通信可能涉及长时间阻塞调用,在实际开发过程中建议把整个流程放到后台工作线程里执行以免影响主线程响应速度;另外记得妥善管理生命周期结束后的清理动作比如关闭打开过的socket实例防止内存泄漏等问题发生。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值