2016-04-12 7 views
2

ich bin immer Bild aus der Galerie von unten CodeWählen Bild aus der Galerie für einige Gerät es null

Uri filePath = data.getData(); 
String[] filePathColumn = {MediaStore.Images.Media.DATA, 
        MediaStore.Images.Media.DISPLAY_NAME, MediaStore.Images.Media.MIME_TYPE}; 
      Cursor cursor = 
        mCon.getContentResolver().query(filePath, filePathColumn, null, null, null); 

aber wenn ich Bild aus Datei auswählen erkunden in einigen Geräten Cursor immer null ist, aber wenn ich wählen gleiche Bild aus Galerie-App funktioniert es ... warum es so?

Antwort

5

versuchen diesen Code

private String uriToFilename(Uri uri) { 
     String path = null; 

     if (Build.VERSION.SDK_INT < 11) { 
      path = RealPathUtil.getRealPathFromURI_BelowAPI11(this, uri); 
     } else if (Build.VERSION.SDK_INT < 19) { 
      path = RealPathUtil.getRealPathFromURI_API11to18(this, uri); 
     } else { 
      path = RealPathUtil.getRealPathFromURI_API19(this, uri); 
     } 

     return path; 
    } 

erstellen RealOathUtil.java

public class RealPathUtil { 
    @SuppressLint("NewApi") 
    public static String getRealPathFromURI_API19(Context context, Uri uri) { 
     Log.e("uri", uri.getPath()); 
     String filePath = ""; 
     if (DocumentsContract.isDocumentUri(context, uri)) { 
      String wholeID = DocumentsContract.getDocumentId(uri); 
      Log.e("wholeID", wholeID); 
// Split at colon, use second item in the array 
      String[] splits = wholeID.split(":"); 
      if (splits.length == 2) { 
       String id = splits[1]; 

       String[] column = {MediaStore.Images.Media.DATA}; 
// where id is equal to 
       String sel = MediaStore.Images.Media._ID + "=?"; 
       Cursor cursor = context.getContentResolver().query(MediaStore.Images.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(); 
      } 
     } else { 
      filePath = uri.getPath(); 
     } 
     return filePath; 
    } 

    @SuppressLint("NewApi") 
    public static String getRealPathFromURI_API11to18(Context context, Uri contentUri) { 
     String[] proj = {MediaStore.Images.Media.DATA}; 
     String result = null; 
     CursorLoader cursorLoader = new CursorLoader(
       context, 
       contentUri, proj, null, null, null); 
     Cursor cursor = cursorLoader.loadInBackground(); 
     if (cursor != null) { 
      int column_index = 
        cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
      cursor.moveToFirst(); 
      result = cursor.getString(column_index); 
     } 
     return result; 
    } 

    public static String getRealPathFromURI_BelowAPI11(Context context, Uri contentUri) { 
     String[] proj = {MediaStore.Images.Media.DATA}; 
     Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null); 
     int column_index 
       = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } 
} 

Jetzt in onactivtyResult() verwenden, um dieses

Uri selectedImageUri = data.getData(); 
String selectedImagePath = uriToFilename(selectedImageUri); 
+0

in diesem wie ich URL bekommen kann – andro

+0

in getRealPathFromURI_API19 es geht immer sonst, wie ich Cursor von allen der Methode bekommen kann coz ich will Dateipfad dann Datei mein Typ – andro

+0

kann mir sagen, wie ich PDF Mime in diesem Mehtod – andro

0

Sie sollten dies versuchen.

Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
+0

Ich verwende Intent intent = new Intent(); intention.setType ("*/*"); intent.setAction (Absicht.ACTION_GET_CONTENT); startActivityForResult (Intent.createChooser (Absicht, "Bild auswählen"), PICK_IMAGE_REQUEST); – andro

0

Try thi s Code.

Galerie zu öffnen:

Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_PICK); 
    startActivityForResult(Intent.createChooser(intent, "Complete action using"), 1); 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 1 && resultCode == RESULT_OK) { 
     Uri selectedImageUri = data.getData(); 
     mImagePath = getPath(selectedImageUri); 
     mBitmap = BitmapFactory.decodeFile(mImagePath); 
     mProfilePic.setImageBitmap(mBitmap); 
    } 
} 

tatsächlichen Pfad des Bildes zu erhalten:

public String getPath(Uri uri) { 
    String[] projection = {MediaStore.Images.Media.DATA}; 
    Cursor cursor = getContentResolver().query(uri, projection, null, null, null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 

Hope this Sie helfen können.

+0

nein in diesem Code gibt es Cursor null, wenn Bild aus Datei auswählen explorieren – andro

+0

Haben Sie diesen Code ausprobiert? – Mrunal

+0

Dies ist der gleiche Code ei have wriiten Sie können qus überprüfen – andro

Verwandte Themen