2011-12-27 32 views
6
  1. chọn Launch ảnh sử dụng Intent.ACTION_GET_CONTENT
  2. Lấy URI của mục được chọn
  3. Lấy PATH của URI để tôi có thể gửi nó đến máy chủ web của tôiURI từ Intent.ACTION_GET_CONTENT vào file

    Mã để khởi động trình duyệt

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
    intent.setType("image/*"); 
    startActivityForResult(intent, BROWSE_IMAGE_REQUEST_CODE); 
    

    Mã để lấy được lựa chọn hình ảnh

    if (RESULT_OK == resultCode && 
          BROWSE_IMAGE_REQUEST_CODE == requestCode) { 
    Uri uri = data.getData(); 
    

    Mã để gửi đến máy chủ web

    File file = new File(uri.getPath()); 
    new FileSystemResourceFile(file); 
    

Tôi hiện đang có khả năng lấy PATH từ URI không prob /external/images/media/24 nhưng đối với một số tập tin vì lý do kỳ lạ luôn là null , xin vui lòng giúp đỡ?

+2

uri.getPath() là/bên ngoài/images/phương tiện/24. Đây là tập tin? – miqbal

+0

có và tôi đang cố gắng chuyển tệp đó tới FileSystemResourceFile để không có lợi nhuận – lemon

Trả lời

19

tôi đã thực hiện phương pháp này để chuyển đổi từ UriIntent.ACTION_GET_CONTENT đến con đường thực tế:

public static String getRealPathFromUri(Activity activity, Uri contentUri) { 
    String[] proj = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = activity.managedQuery(contentUri, proj, null, null, null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 

Mà lần lượt chuyển thành File:

Uri filePathFromActivity = (Uri) extras.get(Intent.EXTRA_STREAM); 
filePathFromActivity = Uri.parse(FileUtil.getRealPathFromUri((Activity) IntentActivity.this, filePathFromActivity)); 
File imageFile = new File(filePathFromActivity.getPath()); 
+2

Activity.managedQuery bị khấu hao. Sử dụng: \t CursorLoader loader = new CursorLoader (hoạt động, contentUri, proj, null, null, null); thay vì – Patrick

+1

@Patrick Nó không phải là rất rõ ràng với tôi LÀM THẾ NÀO bạn sẽ sử dụng một CursorLoader trong trường hợp này. Hoặc làm thế nào để sử dụng nó ở tất cả, thẳng thắn. Các tài liệu để lại rất nhiều để được mong muốn. Vì tôi có thể chạy toàn bộ tác vụ này trong một chuỗi, tôi sẽ chỉ bỏ qua lời khuyên của bạn và sử dụng managedQuery(). Bởi vì rõ ràng hơn là làm thế nào để làm cho công việc đó, đặc biệt là vì tôi cần một kết quả đồng bộ. – SomeCallMeTim

+0

@SomeCallMeTim để sử dụng CursorLoader chỉ cần gọi phương thức loadInBackground(). Nó sẽ trả về một con trỏ. http://developer.android.com/reference/android/content/CursorLoader.html#loadInBackground%28%29 –

Các vấn đề liên quan