2014-01-24 3 views
1

Я могу загрузить видео через этот код до версии 4.1.2 android. но в 4.3 это не удается.невозможно загрузить видео через action_send намерение в Android 4.3

вызывающий shareVideo() метод android отображает список приложений, но в случае выбора youtube из списка открывается приложение youtube, а затем останавливается без какого-либо сообщения, а в случае выбора instagram произойдет сбой приложений для instagram. Я не могу загружать видео через любое приложение, включая facebook.

Пожалуйста, расскажите мне, в чем проблема?

Заранее спасибо.

public void shareVideo(View view){ 
    new Handler().post(new Runnable() { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      ContentValues content = new ContentValues(4); 
      content.put(MediaStore.Video.VideoColumns.DATE_ADDED, 
      System.currentTimeMillis()/1000); 
      content.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4"); 
      content.put(MediaStore.Video.Media.DATA, filename); 

      Uri videoURI = getBaseContext().getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, content); 
      //Uri videoURI = Uri.fromFile(new File(filename)); 
       Intent intent = new Intent(Intent.ACTION_SEND); 
       //intent.setAction(Intent.ACTION_SEND); 
       intent.setType("video/mp4"); 
       intent.putExtra(MediaStore.EXTRA_OUTPUT, videoURI); 
       try { 
       startActivity(Intent.createChooser(intent,"Upload video via:")); 
       } catch (android.content.ActivityNotFoundException ex) { 

       } 
     } 
    }); 

    } 

ответ

2

После того, как 4.1 android изменил механизм пути к SD-карте. теперь я могу загрузить видео, получив uri через идентификатор видеофайла. вот мой код

public static String getVideoContentUriFromFilePath(Context ctx, String filePath) { 

     ContentResolver contentResolver = ctx.getContentResolver(); 
     String videoUriStr = null; 
     long videoId = -1; 
     Log.d("first log","Loading file " + filePath); 

     // This returns us content://media/external/videos/media (or something like that) 
     // I pass in "external" because that's the MediaStore's name for the external 
     // storage on my device (the other possibility is "internal") 
     Uri videosUri = MediaStore.Video.Media.getContentUri("external"); 

     Log.d("second log","videosUri = " + videosUri.toString()); 

     String[] projection = {MediaStore.Video.VideoColumns._ID}; 

     // TODO This will break if we have no matching item in the MediaStore. 
     Cursor cursor = contentResolver.query(videosUri, projection, MediaStore.Video.VideoColumns.DATA + " LIKE ?", new String[] { filePath }, null); 
     cursor.moveToFirst(); 

     int columnIndex = cursor.getColumnIndex(projection[0]); 
     videoId = cursor.getLong(columnIndex); 

     Log.d("third log","Video ID is " + videoId); 
     cursor.close(); 
     if (videoId != -1) videoUriStr = videosUri.toString() + "/" + videoId; 
     return videoUriStr; 
    } 

и щелчком кнопки загрузки использования этого ме-

public void shareVideo(View view){ 
    new Handler().post(new Runnable() { 

     @Override 
     public void run() { 
String newPath=getVideoContentUriFromFilePath(ShareVideoActivity.this, videoPath); 
Intent intent = new Intent(Intent.ACTION_SEND); 
        intent.putExtra(android.content.Intent.EXTRA_SUBJECT,"Title"); 
       //intent.setAction(Intent.ACTION_SEND); 
       intent.setType("video/mp4"); 
       intent.putExtra(Intent.EXTRA_STREAM, Uri.parse(newPath)); 
       try { 
       startActivity(Intent.createChooser(intent,"Upload video via:")); 
       } catch (android.content.ActivityNotFoundException ex) { 

       } 
    } 
     } 
    }); 

} 
+0

Я использую тестирование для KitKat андроида и только этот код работает для меня, спасибо большое – Ehsan

Смежные вопросы