gpt4 book ai didi

android - 如何浏览文件并通过蓝牙将其发送到连接的设备?

转载 作者:行者123 更新时间:2023-11-29 21:27:06 24 4
gpt4 key购买 nike

Obs:我知道这里有很多关于此的问题,但没有一个是我想要的,认真的,所以不要因为 Duplicate 而否决它。问题,谢谢。

好吧,我有一个应用程序,其中包含所有必要的 Bluetooth用于连接和管理等的类。我的应用程序是 Chat通过Bluetooth ,我可以将字符串消息发送到另一台设备,另一台设备也可以发送给我。 ServerClient .

这是我发送Message的方法(工作)

public boolean sendMessageByBluetooth(String msg){
try {
if(dataOutputStream != null){
dataOutputStream.write(msg.getBytes());
dataOutputStream.flush();
return true;
}else{
sendHandler(ChatActivity.MSG_TOAST, context.getString(R.string.no_connection));
return false;
}
} catch (IOException e) {
LogUtil.e(e.getMessage());

sendHandler(ChatActivity.MSG_TOAST, context.getString(R.string.failed_to_send_message));
return false;
}
}

如果可能的话,我想要一个类似于那个方法的方法,可以Send Files所以我可以使用相同的来源来实现 File Transfer .

但我需要在我的应用程序上有一个功能,即 File Transfer , 有一个 Browse按钮在您的 Device 上搜索文件然后选择它并发送到配对设备,就这么简单。

我也想看ProgressBar填写给用户看看发送文件需要多长时间:)

我该怎么做?

--编辑--

我正在尝试 File Transfer这是我所做的:

FileActivity.java

onCreate 连接事件:

verifyAndActivateBluetooth(); //this function is same used on ChatActivity it is working.
registerFilter(); //this function is same used on ChatActivity it is working.
chatBusinessLogic.startFoundDevices(); //this function is same used on ChatActivity and it is working.

然后我选择可见的另一台设备,它连接成功。

连接后 Then..

按钮 Browse -> 显示文件资源管理器的 Intent :

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent, FILE_FOUND);

FileActivity onActivityResult switch(requestCode) :

case FILE_FOUND:
filename = data.getData().getPath(); //here was the problem of error 1. now fixed
if(filename.trim().length() > 0){

if(chatBusinessLogic.sendFile(filename)){
lblFilename.setText(filename);
toastUtil.showToast("Success");
}
}else{
toastUtil.showToast("fail");
}

chatBusinessLogic.sendFile(filename) :

public boolean sendFile(String file){

if(bluetoothComunication != null){
return bluetoothComunication.sendFileByBluetooth(file);
}else{
return false;
}
}

bluetoothComunication.sendFileByBluetooth(file) :

public boolean sendFileByBluetooth(String fpath){

File f = new File(fpath);
int n = 0;
byte b[] = new byte[(int) f.length()];
try
{
FileInputStream fileInputStream = new FileInputStream(new File(fpath)); //ERROR FIXED
DataOutputStream dataOut = new DataOutputStream(dataOutputStream);
while (-1 != (n = fileInputStream.read(b))){
dataOutputStream.write(b, 0, n);
}
dataOut.flush();
fileInputStream.close();
dataOut.close();
return true;
}catch(IOException e)
{
LogUtil.e("Error converting file");
LogUtil.e(e.getMessage());
return false;
}

我收到此错误(现在已修复):如果我为物理路径选择 android native 方法:

/content:/com.estrongs.files/mnt/sdcard/calc-history.txt: open failed: ENOENT (No such file or directory)

如果我为物理路径选择替代方法:

/file:/mnt/sdcard/calc-history.txt: open failed: ENOENT (No such file or directory)

以上错误已使用 filename = data.getData().getPath(); 修复关于案例FILE_FOUND而不是 filename = data.getDataString();

现在我在这条线上有另一个错误:

dataOutputStream.write(b, 0, n);

错误信息是:Transport endpoint is not connected ,我该怎么办?

最佳答案

要浏览您的设备,请使用类似 aFileChooser 的内容(还有很多。google 一下;)。
您可以使用dataOutputStream/dataInputStream 来发送/接收文件,就像您已经对消息所做的那样。
你试过ACTION_SEND了吗? -意向了吗?它也可以那样工作。
ProgressBar是一个随时可用的 android 小部件,这应该不是问题。
如果您需要一般信息,请使用 Android Developers Guide (你可能已经这样做了)。几乎所有关于 android 的东西都可以在那里找到,你只需要看看。

编辑:(来自评论)

FileInputStream fin = new FileInputStream(<filepath>);
DataOutputStream dOut = new DataOutputStream(out);
int n = 0;
byte[] buffer = new byte[1024 * 4];
while (-1 != (n = fin.read(buffer))) {
dOut.write(buffer, 0, n);
}
dOut.flush();
fin.colse();
dOut.close();

希望这是可以理解的。

关于android - 如何浏览文件并通过蓝牙将其发送到连接的设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20080893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com