Android Smack 4.1文件传输,错误无法读取文件

时间:2015-09-22 05:14:04

标签: android

这是我的演示代码 任何人都可以帮助我摆脱这个错误吗?我的代码得到以下异常(无法读取文件)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();
            }
        }
    });
}

1 个答案:

答案 0 :(得分:0)

您无法从Android 4.4直接访问SD卡中不在您的软件包目录中的任何文件。检查this答案,这里告诉您如何访问SD卡内的包文件以及如何创建此类目录。

创建这些目录并将文件放入其中后,您就可以毫无问题地访问文件。

相反,如果您想要访问SD卡中的任何文件,则会有4.4 workaround,这可能会让您这样做。但我不推荐它

希望有所帮助