android 8.1 电脑连接手机蓝牙,电脑向手机传输文件时的文件格式限制及其解决方法

本文探讨了Android 8.1中蓝牙文件传输的安全限制,特别是在电脑向手机传输文件时遇到的文件格式问题。通过分析`BluetoothOppObexServerSession`的源码,揭示了Android如何检查文件扩展名和MIME类型来决定是否允许传输。当无法获取到MIME类型或者文件类型不在白名单内时,传输会被拒绝。为了解除这些限制,可以考虑修改系统源码中的`extensionToMimeTypeMap`。
摘要由CSDN通过智能技术生成

出于安全考虑,Android 蓝牙在传输文件时对文件格式有限制,默认情况下,并不是所有文件都能够传输和共享,当电脑向Android手机传输文件的时候也是有这种限制的。

Bluetooth\src\com\android\bluetooth\opp\BluetoothOppObexServerSession.java

当电脑向手机发送蓝牙文件时会调用BluetoothOppObexServerSession的onPut方法,方法如下

@Override

public int onPut(Operation op) {

if (D) Log.d(TAG, "onPut " + op.toString());

HeaderSet request;

String name, mimeType;

Long length;

int obexResponse = ResponseCodes.OBEX_HTTP_OK;

/**

* For multiple objects, reject further objects after user deny the

* first one

*/

if (mAccepted == BluetoothShare.USER_CONFIRMATION_DENIED) {

return ResponseCodes.OBEX_HTTP_FORBIDDEN;

}

String destination;

if (mTransport instanceof BluetoothObexTransport) {

destination = ((BluetoothObexTransport)mTransport).getRemoteAddress();

} else {

destination = "FF:FF:FF:00:00:00";

}

boolean isWhitelisted = BluetoothOppManager.getInstance(mContext).

isWhitelisted(destination);

try {

boolean pre_reject = false;

request = op.getReceivedHeader();

if (V) Constants.logHeader(request);

name = (String)request.getHeader(HeaderSet.NAME);

length = (Long)request.getHeader(HeaderSet.LENGTH);

mimeType = (String)request.getHeader(HeaderSet.TYPE);

if (length == 0) {

if (D) Log.w(TAG, "length is 0, reject the transfer");

pre_reject = true;

obexResponse = ResponseCodes.OBEX_HTTP_LENGTH_REQUIRED;

}

if (name == null || name.equals("")) {

if (D) Log.w(TAG, "name is null or empty, reject the transfer");

pre_reject = true;

obexResponse = ResponseCodes.OBEX_HTTP_BAD_REQUEST;

}

if (!pre_reject) {

/* first we look for Mimetype in Android map */

String extension, type;

int dotIndex = name.lastIndexOf(".");

if (dotIndex < 0 && mimeType == null) {

if (D) Log.w(TAG, "There is no file extension or mime type," +

"reject the transfer");

pre_reject = true;

obexResponse = Re

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值