2

obtenir le chemin du fichier vidéo sélectionné à partir de la galerie obtenant NULL. Comment obtenir le chemin du fichier vidéo? Obtenir URi dans l'activité Résultat donne également null. convertir Uri en String obtenant également Null.obtient le chemin du fichier vidéo sélectionné à partir de la galerie obtenant la valeur NULL. Comment obtenir le chemin du fichier vidéo?

Intent intent; 
String selectedVideo1Path, selectedVideo2Path; 
EditText e1,e2; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.videos_activity); 
    Button button1 = (Button) findViewById(R.id.video1_btn); 
    Button button2 = (Button) findViewById(R.id.video2_btn); 



    button1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      selectVideoFromGallery(); 
      startActivityForResult(intent, 101); 
     } 
    }); 

    button2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      selectVideoFromGallery(); 
      startActivityForResult(intent, 102); 
     } 
    }); 



} 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 101) { 
     if (data.getData() != null) { 
      selectedVideo1Path = getPath(data.getData()); 

      Toast.makeText(MergeVideosActivity.this, "Path 1 : "+selectedVideo1Path, Toast.LENGTH_SHORT).show(); 


     } else { 
      Toast.makeText(getApplicationContext(), "Failed to select video", Toast.LENGTH_LONG).show(); 
     } 
    } 
    if (requestCode == 102) { 
     if (data.getData() != null) { 
      selectedVideo2Path = getPath(data.getData()); 
      //String str2 = selectedVideo2Path.toString(); 
      // e2.setText(str2); 
      Toast.makeText(MergeVideosActivity.this, "Path 2 : "+selectedVideo2Path, Toast.LENGTH_SHORT).show(); 

     } else { 
      Toast.makeText(getApplicationContext(), "Failed to select video", Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

Ceci est mon getPath method

public String getPath(Uri uri) { 
    int column_index = 0; 
    String[] projection = {MediaStore.Images.Media.DATA}; 
    Cursor cursor = managedQuery(uri, projection, null, null, null); 
    if (cursor != null) { 
     column_index = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA); 
     cursor.moveToFirst(); 

    } 
    return cursor.getString(column_index); 
} 

sélectionnés Vidéo de la Galerie J'espère que son OK? Check it

public void selectVideoFromGallery() { 
     if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) { 
      intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI); 
     } else { 
      intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Video.Media.INTERNAL_CONTENT_URI); 
     } 
     intent.setType("video/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
    } 
} 
+0

quelle version d'Android que vous avez utilisé pour tester. – USKMobility

+0

NeXus 4 (5.1.1) API 22 –

+0

ACTION_GET_CONTENT n'est pas obligé de vous renvoyer un 'Uri' qui correspond à un fichier auquel vous pouvez accéder. L'utilisateur peut choisir un fichier sur stockage amovible, ou dans le stockage interne d'une autre application (par exemple, Dropbox), ou un fichier crypté, etc. Plus tôt vous arrêtez de penser en termes de chemins de fichier, plus il est probable que vous aura du succès. – CommonsWare

Répondre

9

Mettez à jour votre méthode de getPath

public String generatePath(Uri uri,Context context) { 
     String filePath = null; 
     final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; 
     if(isKitKat){ 
      filePath = generateFromKitkat(uri,context); 
     } 

     if(filePath != null){ 
      return filePath; 
     } 

     Cursor cursor = context.getContentResolver().query(uri, new String[] { MediaStore.MediaColumns.DATA }, null, null, null); 

     if (cursor != null) { 
      if (cursor.moveToFirst()) { 
       int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA); 
       filePath = cursor.getString(columnIndex); 
      } 
      cursor.close(); 
     } 
     return filePath == null ? uri.getPath() : filePath; 
    } 

    @TargetApi(19) 
    private String generateFromKitkat(Uri uri,Context context){ 
     String filePath = null; 
     if(DocumentsContract.isDocumentUri(context, uri)){ 
      String wholeID = DocumentsContract.getDocumentId(uri); 

      String id = wholeID.split(":")[1]; 

      String[] column = { Media.DATA }; 
      String sel = Media._ID + "=?"; 

      Cursor cursor = context.getContentResolver(). 
        query(Media.EXTERNAL_CONTENT_URI, 
          column, sel, new String[]{ id }, null); 



      int columnIndex = cursor.getColumnIndex(column[0]); 

      if (cursor.moveToFirst()) { 
       filePath = cursor.getString(columnIndex); 
      } 

      cursor.close(); 
     } 
     return filePath; 
    } 
+0

Causée par: java.lang.NullPointerException: Tentative d'invocation de la méthode virtuelle 'android.content.pm.PackageManager android.content.Context.getPackageManager()' sur une référence d'objet nul –

+0

remplacez le contexte par votre instance d'activité comme yourActivity.this – USKMobility

+2

Cela devrait être la bonne réponse. Je vous remercie. – airowe