2012-12-18 1 views
0

J'ai eu des problèmes pour joindre un fichier vidéo (il est toujours inférieur à 100 Ko) via l'intention de mms. Bien que cela fonctionne parfaitement bien sur karbonn A21 (ICS 4.0.4), la connexion échoue sur HTC One V (ICS 4.0.3) et LG-P920 (2.2.2). J'obtenir un toast comme « incapable de joindre la vidéo à un message »L'association de la vidéo à l'intention mms échoue sur des périphériques spécifiques

Ceci est le code que j'ai

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); 

Tous les indices// astuces pointeurs sur ce que je pourrais faire serait utile.

+0

obtenir le même problème en htc étonner, si vous trouvez une solution alors s'il vous plaît mettez le code correct. – Harshid

+0

@Harshid J'ai mis à jour avec une réponse bien que je suis certain que ce n'est pas la bonne réponse absolue. J'espère toujours que j'obtiendrai une bonne réponse bientôt de la communauté ici. Améliorer ou afficher une réponse sera très apprécié. –

Répondre

1

cette cause de problème, car dans la vidéo/image devez ajouter à l'office:

code lu dans

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/2.3.3_r1/com/android/mms/ui/ComposeMessageActivity.java

mise au point en partie addAttachment , J'ai vu

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."); 
    }) 

Nous avons vu le message lancé pas clair et causer des malentendus.

Pour résoudre ce problème, vous devez ajouter le fichier à la galerie, passer l'URI obtenir de contentResolver.insert à Intent.EXTRA_STREAM intention avec clé

une plus grande expérience de mon MMS lors de l'utilisation, l'utilisation par défaut d'activité de classe Pour envoyer un changement de MMS entre les périphériques et les fabricants, la setClass com.android.mms.ui.ComposeMessageActivity n'a pas toujours raison, elle peut provoquer ActivityNotFoundException. Lorsque cela se produit, vous devez appeler setPackge ("com.android.mms") et supprimer l'appel setClass. Espérons qu'il aide

+0

Cela fonctionne comme un charme. Merci @Nguyen Hieu – hoangtu23

+0

Je n'ai pas encore essayé cela mais cela semble prometteur. Je vais accepter cela en passant par le commentaire de @ hoangtu23 qui résout le problème. –

0

Mon approche a été jusqu'ici de laisser la part de l'utilisateur la vidéo via gmail, youtube et ce avec une option de partager via mms

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(); 

J'essaie de remplir mes intentions cibles pour le Intent.createChooser savoir seulement ceux-ci travailleraient à attacher/télécharger ma vidéo

EDIT: Je n'accepterai pas ma propre réponse comme la bonne. Je suis plus optimiste, il y a un meilleur là

Questions connexes