2009-12-07 32 views
9

Vì vậy, tôi đang cố gắng để cho phép người dùng chọn một đoạn cụ thể của phương tiện truyền thông với các ứng dụng Android của tôi bằng cách sử dụng phương pháp mô tả ở đây: Access pictures from Pictures app in my android appVideo Truy cập và hình ảnh trên Android 1.5 +

Nó hoạt động tuyệt vời, ngoại trừ thực tế là tôi dường như chỉ có thể chọn giữa Video hoặc Ảnh để trình bày người dùng với, không phải cả hai cùng một lúc. Có cách nào tốt để làm điều này với:

startActivityForResult (mới Intent (Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), SELECT_IMAGE);

Cảm ơn!

+0

Để thêm sự xúc phạm đến chấn thương - khi tôi sử dụng phương pháp này với Video - nó sẽ không thực sự cho phép người dùng chọn các phương tiện truyền thông - nó chỉ đóng nó khi họ chọn nó - và nó sẽ không hiển thị hình thu nhỏ. Tôi sẽ được viết lại Gallery? Có cách nào tôi có thể gọi lên Gallery và sau đó có nó trở lại Uri cho một mảnh được chọn của phương tiện truyền thông? – FunnyLookinHat

Trả lời

17

Tôi đã sử dụng vài lần này. Cách tốt nhất là:

Intent mediaChooser = new Intent(Intent.ACTION_GET_CONTENT); 
//comma-separated MIME types 
mediaChooser.setType("video/*, images/*"); 
startActivityForResult(mediaChooser, 1); 

Ngay cả khi điều này không hoàn toàn chính xác, nó đã hoạt động tốt trong mọi thứ tôi đã sử dụng. Nó sẽ mở hoạt động Thư viện-esque với danh sách thu nhỏ mọi hình ảnh/video trong thư viện của người dùng. Mục đích được trả về là onActivityResult() có thêm "DATA" sẽ là nội dung: // URI cho phương tiện đã chọn.

EDIT: oops, để có được những URI với giới truyền thông được lựa chọn bạn thực sự muốn gọi getData() trên tiếp cận mục đích đó được truyền cho onActivityResult()

+2

Robert - Vì một số lý do bất cứ khi nào tôi sử dụng dòng sau, tôi có một bộ chọn trống hiển thị: mediaChooser.setType ("video/*, images/*"); Tôi cũng đã thử điều này không có may mắn ... mediaChooser.setType ("video/*, image/*"); Tuy nhiên, mỗi cá nhân hoạt động tốt ... tức là phương tiệnChooser.setType ("video/*"); mediaChooser.setType ("image/*"); Bạn có thể dán đoạn mã chính xác hoạt động không? **** EDIT - Có vẻ như cách này không hoạt động nữa phiên bản đăng 2.0 – FunnyLookinHat

+3

Xin chào! Tôi đang sử dụng Android 1.6 và nó KHÔNG hoạt động! Chỉ có hình ảnh hoặc video duy nhất là được. Bất kỳ ý tưởng? – Karoly

+1

Không hoạt động trên 2,3 –

1

Kivy - Cách đơn giản nhất là tạo ra một ý định để chọn một mảnh phương tiện truyền thông và hạn chế nó đến video:

Intent pickMedia = new Intent(Intent.ACTION_GET_CONTENT); 
pickMedia.setType("video/*"); 
startActivityForResult(pickMedia,12345); 

Note - 12345 là số nguyên mà ứng dụng của bạn cần phải lắng nghe trên một callback yêu cầu để bạn có thể gửi bất kỳ thông tin mà bạn nhận được bất cứ nơi nào bạn cần.

Sau đó bạn cũng cần phải có cùng một hoạt động lắng nghe các thông tin sẽ được gửi trở lại từ ý rằng:

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == 12345) { 
      if (resultCode == Activity.RESULT_OK) { 
       Uri selectedVideoLocation = data.getData(); 

       // Do something with the data... 
      } 

     } 
    } 

mát?

+1

Câu hỏi đặt ra là truy cập video VÀ ảnh - không chỉ video. Câu trả lời bạn đưa ra chỉ liên quan đến video. –

+0

Thật không may là bạn không thể làm điều đó trong Android 2.0+ - phương pháp giả của mediaChooser.setType ("video/*, images/*"); sẽ không hoạt động và trừ khi bạn tạo hoạt động cho phép của riêng mình quét tìm phương tiện và trả về màn hình chọn - tốt nhất bạn sẽ nhận được là cung cấp cho người dùng lựa chọn giữa Hình ảnh video. – FunnyLookinHat

+0

Không biết những gì họ đã làm trong 4.2.x, nhưng việc chọn nhiều loại mime dường như hoạt động tốt :) –

1
intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
startActivityForResult(intent, 1); 
1

Hãy thử điều này

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("*/*"); 
startActivityForResult(intent, 101); 
Các vấn đề liên quan