9

Tôi sử dụng MediaPlayer để phát một tệp MP3. Hiện tại tôi đã tắt các thay đổi hướng màn hình bằng cách sử dụngAndroid: Giữ MediaPlayer chạy trong khi cập nhật hướng màn hình Hoạt động

android:screenOrientation="portrait" 
android:configChanges="keyboardHidden|orientation" 

trong tệp kê khai. Tôi muốn hỗ trợ chế độ phong cảnh ngay bây giờ - tức là đã xóa các thẻ đó - nhưng có vấn đề trong suốt quá trình hủy/tạo, trình phát bị dừng lại và sau đó khởi động lại. Điều này là ổn và tôi thực sự làm điều này ngay cả theo cách thủ công trong onPause() để dừng trình phát khi hoạt động diễn ra ở chế độ nền.

Để giữ cho nó chạy trong các thay đổi định hướng ngay bây giờ, tôi đã cố gắng làm cho nó tĩnh (và sử dụng Ngữ cảnh ứng dụng để tạo nó một lần). Tất nhiên, khi tôi xóa player.stop() trong onPause() bây giờ, nó thực hiện những gì tôi muốn - tốt, cho đến khi hoạt động diễn ra trong nền.

Vì vậy, hai câu hỏi:

  • Làm thế nào tôi có thể xác định xem các hoạt động sẽ được tái tạo trực tiếp sau khi cuộc gọi đến onStop()
  • Hoặc: Làm thế nào tôi có thể giữ MediaPlayer chạy trong chu kỳ đó, chưa ngăn chặn nó khi ứng dụng chạy ở chế độ nền?

Trả lời

3

Bạn đã xem xét sử dụng gọi lại onConfigurationChanged() để xử lý một số logic này?

+0

Nó không được gọi do 'android loại bỏ: configChanges' trong biểu hiện. – sunside

+0

Nếu bạn muốn phân biệt giữa khi bạn chỉ thay đổi cấu hình và khi bạn thực sự dừng lại, tôi không biết cách nào khác để thực hiện nó ngoài việc sử dụng onConfigurationChanged(). Mà tôi đoán có nghĩa là bạn sẽ phải giữ 'android: configChanges =" orientation "' trong tệp kê khai của bạn: \ –

+0

Đó là những gì tôi lo sợ ... – sunside

1

Thử chạy MediaPlayer trong Chủ đề khác.

Bạn có thể thêm vào chủ đề này một API phức tạp hơn mà bạn có thể gọi từ onCreate/onStop/on*

1

Nếu bạn đang sử dụng mảnh vỡ (và bạn nên: P), sau đó gọi setRetainInstance(true) bên trong mảnh vỡ của bạn onCreate () cuộc gọi sẽ làm cho vấn đề này hoàn toàn biến mất.

0

Vui lòng xem câu trả lời sau: https://stackoverflow.com/a/31466602/994021

Đây là POC tôi đã tạo cho mục đích này. Mệt mỏi vì giải quyết vấn đề này nhiều lần cho các dự án khác nhau. Tôi hy vọng nó sẽ giúp.

tôi thực sự khuyên bạn nên chuyển sang một cầu thủ bên thứ ba như ExoPlayer từ google guys: https://github.com/google/ExoPlayer

+0

i m bằng cách sử dụng ExoPlayer nhưng làm thế nào tôi sẽ xử lý này? – Erum

+1

@Erum bạn sẽ phải sử dụng cờ android:configChanges="screenSize|orientation" trong hoạt động của mình. –

+0

@Gasper de Elias tôi đã làm điều này nhưng có vấn đề khác bố trí của tôi tôi không điều chỉnh programatically một lần tôi thay đổi định hướng? – Erum

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