【问题标题】:Share a video from my android app从我的安卓应用分享视频
【发布时间】:2015-10-14 17:27:20
【问题描述】:

在我的应用程序中,我正在创建一个视频并将其存储在 sdcard 中。我想分享那个视频。在任何模式下作为用户的选择。我尝试了一些这样的样本。但我不知道确切的方法。请帮帮我。

 share.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_SEND);
            intent.setType("video/*");
            intent.setData(Uri.parse("file://"+"/mnt/sdcard/path"));
            startActivity(Intent.createChooser(intent,"Share via"));
        }
    });

但是在选择器中它没有显示任何应用程序。以正确的方式帮助我。

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    首先,使用真正的 MIME 类型(不是通配符)。

    其次,使用您希望共享的视频的实际路径(而不是错误的硬编码目录路径)。

    第三,使用setDataAndType()在一次调用中设置Uri和MIME类型,因为我相信setData()会清除之前设置的MIME类型。

    【讨论】:

    • 这里的 MIME 类型是什么,如果我们不设置它会产生什么影响。我知道吗??
    • @kalyanpvs:“这里的 MIME 类型是什么”——这取决于您分享的视频。 “如果我们不设置会有什么影响”——ACTION_SEND 可能找不到任何有效的方式来分享视频。
    • sir 使用intent.setType()方法我们已经设置了类型..那么我们是否需要再次设置intent的数据和类型..或者一个就足够了??或者setType( ) 不同于 setDataAndType()??
    • @kalyanpvs:如果您花时间阅读the documentation for setData(),您将阅读以下警告:“此方法会自动清除以前由 setType(String) 设置的任何类型”。因此,我建议您将 setData()setType() 方法替换为 a single call to setDataAndType()
    【解决方案2】:

    事实证明(至少在 Android 5.1+ 上)您需要为 Uri 提供内容路径。以下是如何从文件路径(我保存到公共视频目录)创建内容路径

    public static Uri getVideoContentUri(Context context, String filePath )//File imageFile)
        {
            //String filePath = imageFile.getAbsolutePath();
            Cursor cursor = context.getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                    new String[] { MediaStore.Video.Media._ID }, MediaStore.Video.Media.DATA + "=? ",
                    new String[] { filePath }, null);
    
            if (cursor != null && cursor.moveToFirst())
            {
                int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
                Uri baseUri = Uri.parse("content://media/external/videos/media");
                return Uri.withAppendedPath(baseUri, "" + id);
            }
            else
            {
                ContentValues values = new ContentValues();
                values.put(MediaStore.Video.Media.DATA, filePath);
                return context.getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      • 2017-08-30
      • 2014-10-13
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      相关资源
      最近更新 更多