如何使用ACTION_SEND_MULTIPLE共享图像和AVI文件?

时间:2014-01-04 07:30:12

标签: android android-intent

我的情景是:

我从Gridview中选择了多个项目。

当我点击share button时,它会显示如下项目:电子邮件,蓝牙,消息,FaceBook。

如下图所示。

enter image description here

我参考了Android-developer,但我仍然不知道该怎么做。

我的分享按钮中的代码如下所示:

    public void onClick(View v) {

        ArrayList<FileNode> MultiUri = new ArrayList<FileNode>();

        SparseBooleanArray checkedItems = fileListView.getCheckedItemPositions();
         if (checkedItems != null) {
             for (int i=0; i<checkedItems.size(); i++) {
                    if (checkedItems.valueAt(i)) {

                        int temp_position = checkedItems.keyAt(i);                      
                        final FileNode fileNode = mFileList.get(temp_position) ;

                        MultiUri.add(fileNode);
                        Intent shareIntent = new Intent();
                        shareIntent.setAction(shareIntent.ACTION_SEND_MULTIPLE);
                        shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, (ArrayList<? extends Parcelable>) MultiUri);
                        shareIntent.setType("*/*");
                        startActivity(Intent.createChooser(shareIntent, "Share to.."));

                    }
                }
         }
    }

错误日志如下所示:

D/AndroidRuntime( 4114): Shutting down VM
W/dalvikvm( 4114): threadid=1: thread exiting with uncaught exception (group=0x416cc450)
E/AndroidRuntime( 4114): FATAL EXCEPTION: main
E/AndroidRuntime( 4114): java.lang.RuntimeException: Parcel: unable to marshal value tw.com.a_i_t.IPCamViewer.FileBrowser.Model.FileNode@42353850
E/AndroidRuntime( 4114):    at android.os.Parcel.writeValue(Parcel.java:1240)
E/AndroidRuntime( 4114):    at android.os.Parcel.writeList(Parcel.java:627)
E/AndroidRuntime( 4114):    at android.os.Parcel.writeValue(Parcel.java:1200)
E/AndroidRuntime( 4114):    at android.os.Parcel.writeMapInternal(Parcel.java:596)
E/AndroidRuntime( 4114):    at android.os.Bundle.writeToParcel(Bundle.java:1619)
E/AndroidRuntime( 4114):    at android.os.Parcel.writeBundle(Parcel.java:610)
E/AndroidRuntime( 4114):    at android.content.Intent.writeToParcel(Intent.java:6519)
E/AndroidRuntime( 4114):    at android.os.Parcel.writeParcelable(Parcel.java:1259)
E/AndroidRuntime( 4114):    at android.os.Parcel.writeValue(Parcel.java:1178)
E/AndroidRuntime( 4114):    at android.os.Parcel.writeMapInternal(Parcel.java:596)
E/AndroidRuntime( 4114):    at android.os.Bundle.writeToParcel(Bundle.java:1619)
E/AndroidRuntime( 4114):    at android.os.Parcel.writeBundle(Parcel.java:610)
E/AndroidRuntime( 4114):    at android.content.Intent.writeToParcel(Intent.java:6519)
E/AndroidRuntime( 4114):    at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1741)
E/AndroidRuntime( 4114):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1510)
E/AndroidRuntime( 4114):    at android.app.Activity.startActivityFromFragment(Activity.java:3850)
E/AndroidRuntime( 4114):    at android.app.Activity.startActivityFromFragment(Activity.java:3825)
E/AndroidRuntime( 4114):    at android.app.Fragment.startActivity(Fragment.java:996)
E/AndroidRuntime( 4114):    at android.app.Fragment.startActivity(Fragment.java:975)
E/AndroidRuntime( 4114):    at tw.com.a_i_t.IPCamViewer.FileBrowser.LocalFileBrowserFragment$3.onClick(LocalFileBrowserFragment.java:214)
E/AndroidRuntime( 4114):    at android.view.View.performClick(View.java:4147)
E/AndroidRuntime( 4114):    at android.view.View$PerformClick.run(View.java:17161)
E/AndroidRuntime( 4114):    at android.os.Handler.handleCallback(Handler.java:615)
E/AndroidRuntime( 4114):    at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime( 4114):    at android.os.Looper.loop(Looper.java:213)
E/AndroidRuntime( 4114):    at android.app.ActivityThread.main(ActivityThread.java:4786)
E/AndroidRuntime( 4114):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 4114):    at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 4114):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
E/AndroidRuntime( 4114):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
E/AndroidRuntime( 4114):    at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager(  568):   Force finishing activity tw.com.a_i_t.IPCamViewer/.MainActivity

LocalFileBrowserFragment.java:214startActivity(Intent.createChooser(shareIntent, "Share to.."));

如果我使用File和FileNode,如何获取Uri并添加意图?

如何做下一个?

1 个答案:

答案 0 :(得分:1)

从文件中获取Android.Uri

File file = new File(path, filename);
Uri uri = Uri.fromFile(file);

如果您想获取URI实例,请执行以下操作

File file = new File(path, filename);
URI uri = file.toURI();