2

內容提供商訪問手機拍出的照片,我需要通過內容提供商訪問手機圖像/媒體的樣本代碼或教程?通過安卓

我知道以下,接下來是什麼?

ContentResolver cr = mContext.getContentResolver(); 
Cursor cursor = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null); 
+0

你想要做的究竟是什麼?顯示圖像列表或其他東西? – Fedor 2010-05-23 04:53:02

+0

爲什麼你需要內容提供者,你的意圖是什麼 – the100rabh 2010-05-23 06:50:46

回答

1

我做了一個幫手類,它將收集用戶設備的所有圖像路徑。你可以使用它,如果你想。對於您的信息,加載圖像可能會很慢,所以如果通過後臺線程或加載程序加載它們將會很好。

import android.content.Context; 
import android.database.Cursor; 
import android.net.Uri; 
import android.provider.MediaStore; 

import java.util.ArrayList; 

/** 
* @author hendrawd on 10/26/16 
*/ 

public class ImagePathProvider { 

    /** 
    * Getting All Images Path. 
    * 
    * @param context the activity 
    * @return ArrayList with images Path 
    */ 
    public static ArrayList<String> getAllImagesPath(Context context) { 
     ArrayList<String> listOfAllImages = new ArrayList<>(); 
     listOfAllImages.addAll(getExternalImagesPath(context)); 
     listOfAllImages.addAll(getInternalImagesPath(context)); 
     return listOfAllImages; 
    } 

    /** 
    * Getting All External Images Path. 
    * 
    * @param context the context 
    * @return ArrayList with external images Path 
    */ 
    private static ArrayList<String> getExternalImagesPath(Context context) { 
     return getImagesPathFromUri(context, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    } 

    /** 
    * Getting All Internal Images Path. 
    * 
    * @param context the context 
    * @return ArrayList with internal images Path 
    */ 
    private static ArrayList<String> getInternalImagesPath(Context context) { 
     return getImagesPathFromUri(context, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI); 
    } 

    private static ArrayList<String> getImagesPathFromUri(Context context, Uri uri) { 
     Cursor cursor; 
     int column_index_data; 
     ArrayList<String> listOfAllImages = new ArrayList<>(); 
     String absolutePathOfImage; 
     String[] projection = {MediaStore.MediaColumns.DATA, MediaStore.Images.Media.BUCKET_DISPLAY_NAME}; 
     cursor = context.getContentResolver().query(uri, projection, null, null, null); 
     if (cursor != null) { 
      column_index_data = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA); 
      while (cursor.moveToNext()) { 
       absolutePathOfImage = cursor.getString(column_index_data); 
       listOfAllImages.add(absolutePathOfImage); 
      } 
      cursor.close(); 
     } 
     return listOfAllImages; 
    } 
} 
3

使用CursorLoader:

(在你的AppCompatActivity實施LoaderManager.LoaderCallbacks<Cursor>

private void loadPhotosFromPhone() { 
    getSupportLoaderManager().initLoader(0, null, this); 
} 

@Override 
public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
    String[] projection = {MediaStore.Images.Media.DATA}; 
    return new CursorLoader(this, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, null); 
} 

@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 

    ArrayList<String> alstPhotos = new ArrayList<>(); 

    for (data.moveToLast(); !data.isBeforeFirst(); data.moveToPrevious()){ 
     String photoPath = data.getString(0); 
     alstPhotos.add(photoPath); 
    } 

    // Use alstPhotos 
} 

這將加載在設備上的所有圖像,異步。