繁体   English   中英

尝试通过ftp android上传文件夹时,应用程序崩溃

[英]App crashes while trying to upload a folder by ftp android

这是我的代码:

Intent intent = new Intent();
        intent.setAction(Intent.ACTION_PICK);
        // FTP URL (Starts with ftp://, sftp:// or ftps:// followed by hostname and port).
        Uri ftpUri = Uri.parse("ftp://ftp.myserver.com:21");
        intent.setDataAndType(ftpUri, "vnd.android.cursor.dir/lysesoft.andftp.uri");
        // FTP credentials (optional)
        intent.putExtra("ftp_username", "user");
        intent.putExtra("ftp_password", "pass");
        //intent.putExtra("ftp_keyfile", "/sdcard/dsakey.txt");
        //intent.putExtra("ftp_keypass", "optionalkeypassword");
        // FTP settings (optional)
        intent.putExtra("ftp_pasv", "true");
        //intent.putExtra("ftp_resume", "true");
        //intent.putExtra("ftp_encoding", "UTF8");
        // Upload
        intent.putExtra("command_type", "upload");
        // Activity title
        intent.putExtra("progress_title", "Uploading folder ...");
        intent.putExtra("local_file1", "/sdcard/DCIM/try");
        // Optional initial remote folder (it must exist before upload)
        //intent.putExtra("remote_folder", "remotefolder/uploadedfolder");
        startActivityForResult(intent, 2);

LogCat:

03-07 17:27:49.471: W/dalvikvm(13281): threadid=1: thread exiting with uncaught exception (group=0x415c87c0)
03-07 17:27:49.471: E/AndroidRuntime(13281): FATAL EXCEPTION: main
03-07 17:27:49.471: E/AndroidRuntime(13281): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.whatsappxr/com.example.whatsappxr.MainActivity}: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.PICK dat=ftp://ftp.attracto.tk:21 typ=vnd.android.cursor.dir/lysesoft.andftp.uri (has extras) }
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.ActivityThread.access$600(ActivityThread.java:153)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1269)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.os.Looper.loop(Looper.java:137)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.ActivityThread.main(ActivityThread.java:5289)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at java.lang.reflect.Method.invokeNative(Native Method)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at java.lang.reflect.Method.invoke(Method.java:525)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at dalvik.system.NativeStart.main(Native Method)
03-07 17:27:49.471: E/AndroidRuntime(13281): Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.PICK dat=ftp://ftp.attracto.tk:21 typ=vnd.android.cursor.dir/lysesoft.andftp.uri (has extras) }
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1632)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1424)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.Activity.startActivityForResult(Activity.java:3390)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.Activity.startActivityForResult(Activity.java:3351)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at com.example.whatsappxr.MainActivity.onCreate(MainActivity.java:37)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.Activity.performCreate(Activity.java:5133)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2293)
03-07 17:27:49.471: E/AndroidRuntime(13281):    ... 11 more

我应该怎么做才能使其正常工作?

线索在异常描述中:

原因:android.content.ActivityNotFoundException:找不到用于处理Intent的活动{act = android.intent.action.PICK dat = ftp://ftp.attracto.tk:21 typ = vnd.android.cursor.dir / lysesoft。 andftp.uri(有其他功能)}

在Android中,您可以指定用于拾取特定Intent的Intent处理程序,在本例中为带有ftp:// url模式的android.intent.action.PICK Intent

如果您的应用程序确实接受了这种类型的Intent ,则该应用程序将打开并可以正确处理您的情况。

因此,您想处理用户没有安装有效应用程序的情况。

您可以使用此方法来确定是否处理意图,并且仅在返回true时才继续:

public static boolean isIntentAvailable(Context context, Intent intentToCheck) {
    final PackageManager packageManager = context.getPackageManager();
    List<ResolveInfo> list =
            packageManager.queryIntentActivities(intentToCheck,
                    PackageManager.MATCH_DEFAULT_ONLY);
    return list.size() > 0;
}

您可以在此处详细了解Intent如何在Android中工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM