这是我的演示代码 任何人都可以帮助我摆脱这个错误吗?我的代码得到以下异常(无法读取文件)IllegalArgumentException。
09-22 10:29:22.485 13759-13759/com.abc.xyz E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.abc.xyz, PID: 13759
java.lang.IllegalArgumentException: Could not read file
at org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer.sendFile(OutgoingFileTransfer.java:220)
at com.abc.xyz.FileTransferActivity.transferFile(FileTransferActivity.java:93)
at com.abc.xyz.FileTransferActivity.onClick(FileTransferActivity.java:77)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
这是代码
private void transferFile(final String filePath) {
FileTransferManager fileTransferManager = FileTransferManager.getInstanceFor(MainActivity.Connection);
OutgoingFileTransfer transfer = fileTransferManager.createOutgoingFileTransfer("abc@blackberry-pc/developers");
try
{
transfer.sendFile(new File(filePath),"");
}
catch (SmackException e)
{
e.printStackTrace();
}
//RECEIVE FILES
fileTransferManager.addFileTransferListener(new FileTransferListener() {
@Override
public void fileTransferRequest(FileTransferRequest request) {
IncomingFileTransfer transfer = request.accept();
try {
transfer.recieveFile(new File(filePath));
} catch (SmackException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
答案 0 :(得分:0)
您无法从Android 4.4直接访问SD卡中不在您的软件包目录中的任何文件。检查this答案,这里告诉您如何访问SD卡内的包文件以及如何创建此类目录。
创建这些目录并将文件放入其中后,您就可以毫无问题地访问文件。
相反,如果您想要访问SD卡中的任何文件,则会有4.4 workaround,这可能会让您这样做。但我不推荐它
希望有所帮助