Android 在特定设备上,将视频连接到彩信意图失败

Android 在特定设备上,将视频连接到彩信意图失败,android,video,mms,Android,Video,Mms,我无法通过彩信连接视频文件(总是小于100KB)。尽管这在karbonn A21(ICS 4.0.4)上运行良好,但在HTC one V(ICS 4.0.3)和lg-p920(2.2.2)上连接失败。我收到的祝酒词是“无法将视频附加到邮件” 这是我的密码 Uri uri = Uri.fromFile(videoFile); Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.setType("video/3gp"); s

我无法通过彩信连接视频文件(总是小于100KB)。尽管这在karbonn A21(ICS 4.0.4)上运行良好,但在HTC one V(ICS 4.0.3)和lg-p920(2.2.2)上连接失败。我收到的祝酒词是“无法将视频附加到邮件”

这是我的密码

Uri uri = Uri.fromFile(videoFile);

Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("video/3gp");
sendIntent.setClassName("com.android.mms", "com.android.mms.ui.ComposeMessageActivity");
sendIntent.putExtra("sms_body", "some text here");
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(sendIntent);

任何关于我能做什么的提示/线索/指点都会很有帮助。

到目前为止,我的方法是让用户通过gmail、youtube等方式共享视频,并提供通过彩信共享的选项

ContentValues content = new ContentValues(4);
content.put(Video.VideoColumns.TITLE, "Cool Video");
content.put(Video.VideoColumns.DATE_ADDED,
            System.currentTimeMillis() / 1000);
content.put(Video.Media.MIME_TYPE, "video/3gp");
content.put(MediaStore.Video.Media.DATA, videoFile.getAbsolutePath());

ContentResolver resolver = parentActivity.get().getContentResolver();

//I use two URI's. One for the intent with mms(MMSUri) and the   
//other(ShareURi) is for sharing video with other social apps like
//gmail, youtube, facebook etc. 
Uri ShareUri = resolver.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,content);
Uri MMSUri = Uri.fromFile(videoFile);

List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(sendIntent, 0);
if(!resInfo.isEmpty())
{
    for (ResolveInfo resolveInfo : resInfo) 
    {
        String packageName = resolveInfo.activityInfo.packageName;
        Intent targetIntent = new Intent(Intent.ACTION_SEND);
        targetIntent.setType("video/3gp");
        targetIntent.setPackage(packageName);

        if(packageName.contains("mms"))
        {
             targetIntent.putExtra("sms_body", "Some text here");
             targetIntent.putExtra(Intent.EXTRA_STREAM, MMSUri);
        }
        else
        {
            targetIntent.putExtra(Intent.EXTRA_SUBJECT, "I can has videos?");
            targetIntent.putExtra(Intent.EXTRA_TITLE, "Some title here");
            targetIntent.putExtra(Intent.EXTRA_TEXT,"You have gots to watch this");
            targetIntent.putExtra(Intent.EXTRA_STREAM, ShareUri);
        }
        targetedIntents.add(targetIntent);
    }           

    Intent chooserIntent = Intent.createChooser(targetedIntents.remove(0), "Select app to share");
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toArray(new Parcelable[]{}));

    startActivity(chooserIntent);
    return;
}

Toast.makeToast(this, "No intents found for this action", Toast.LENGTH_SHORT, Gravity.CENTER).show();
ContentValues content=新ContentValues(4);
content.put(Video.VideoColumns.TITLE,“酷视频”);
content.put(添加了Video.VideoColumns.DATE),
System.currentTimeMillis()/1000);
content.put(Video.Media.MIME_类型,“Video/3gp”);
content.put(MediaStore.Video.Media.DATA,videoFile.getAbsolutePath());
ContentResolver解析器=parentActivity.get().getContentResolver();
//我使用两个URI。一个用于使用彩信的目的(MMSUri)和
//other(ShareURi)用于与其他社交应用共享视频,如
//gmail、youtube、facebook等。
Uri ShareUri=resolver.insert(MediaStore.Video.Media.EXTERNAL\u CONTENT\u Uri,CONTENT);
Uri MMSUri=Uri.fromFile(视频文件);
List resInfo=getPackageManager().queryInputActivities(sendIntent,0);
如果(!resInfo.isEmpty())
{
对于(ResolveInfo ResolveInfo:resInfo)
{
字符串packageName=resolveInfo.activityInfo.packageName;
Intent targetIntent=新意图(Intent.ACTION\u SEND);
targetIntent.setType(“视频/3gp”);
targetIntent.setPackage(packageName);
如果(packageName.contains(“mms”))
{
putExtra(“sms_body”,“此处有一些文本”);
targetIntent.putExtra(Intent.EXTRA_流,MMSUri);
}
其他的
{
targetIntent.putExtra(Intent.EXTRA_主题,“我可以有视频吗?”);
targetIntent.putExtra(Intent.EXTRA_标题,“此处的某些标题”);
targetIntent.putExtra(Intent.EXTRA_文本,“您必须观看此节目”);
targetIntent.putExtra(Intent.EXTRA\u流,ShareUri);
}
targetedintent.add(targetIntent);
}           
Intent-chooserint=Intent.createChooser(targetedIntents.remove(0),“选择要共享的应用程序”);
选择content.putExtra(Intent.EXTRA_INITIAL_INTENTS,targetedIntents.toArray(新包裹[]{}));
开始触觉(选择内容);
返回;
}
Toast.makeToast(这是“没有发现此操作的意图”,Toast.LENGTH\u SHORT,Gravity.CENTER.show();
我尝试为
Intent.createChooser
填充我自己的目标意图,因为我知道只有这些意图才能连接/上传我的视频


编辑:我不会接受我自己的答案。我最乐观的是有一个更好的解决方案

这个问题是因为在视频/图像中需要添加到厨房:

读入代码

集中注意力在附件部分,我看到了

  String path = c.getString(c.getColumnIndexOrThrow(Images.Media.DATA));
    mSrc = path.substring(path.lastIndexOf('/') + 1);
    mContentType = c.getString(c.getColumnIndexOrThrow(
    mages.Media.MIME_TYPE));
    if (TextUtils.isEmpty(mContentType)) {
    throw new MmsException("Type of media is unknown.");
    })
我们看到信息被抛得不清楚,引起了误解

要解决这个问题,您需要将文件添加到gallery中,将URI get from contentResolver.insert传递给带有key Intent.EXTRA_流的Intent

我的另一个体验是,当使用彩信时,默认活动类用于在设备和制造商之间发送彩信,因此setClass com.android.MMS.ui.ComposeMessageActivity并不总是正确的,它可能会导致ActivityNotFoundException。当它发生时,您必须调用setPackge(“com.android.mms”)并删除setClass调用。
希望它能帮助您在htc amaze中解决同样的问题,如果您找到了解决方案,请输入正确的代码。@Harshid我已经更新了答案,尽管我确信这不是绝对正确的答案。我仍然希望我能很快从这里的社区得到一个正确的答案。改进或张贴答案将是最感激的。我还没有尝试过这一点,但这看起来很有希望。我接受@hoangtu23的评论,它正在解决问题。