当用户关闭屏幕android时,使应用程序正常工作

少年意气强不羁,虎胁插翼白日飞。这篇文章主要讲述当用户关闭屏幕android时,使应用程序正常工作相关的知识,希望能为你提供帮助。
我正在开发一个媒体播放器的应用程序。
问题:如何在不关闭屏幕的情况下使媒体播放器(应用程序)正常工作?问题:loadInBackground()返回uri,但屏幕关闭时未调用onLoadFinished。
几句话可以更好地解释麻烦:
媒体播放器包含加载歌曲的Loader和加载相关建议的另一个Loader。我还实现了play_next()的方法,它依赖于媒体播放器的监听器(右上角的按钮)。

当用户关闭屏幕android时,使应用程序正常工作

文章图片

媒体播放器在我已经制作的服务类中初始化,因此用户可以搜索新歌,并使用按钮准备next_song()(并且播放继续,因为我每次加载Activity时连接到服务并且我从服务媒体返回所以我可以为onFinish方法附加监听器)。
困扰我的是,当用户关闭屏幕时,活动进入空闲状态(来自android监视器的状态 - 日志猫)并且一旦处于空闲状态(又名关闭屏幕),如果歌曲结束,它将开始新的媒体播放器开始初始化和自动播放歌曲的意图。它在屏幕打开时有效,但如果它进入空闲状态则不起作用。
如果我打开屏幕,我会采取以下行动:
当用户关闭屏幕android时,使应用程序正常工作

文章图片

小粉红点是进度条。所以活动试图刷新自己?在onCreate()方法中,我称start_loader初始化并用Loader做事。
我已经看到了一些电源管理器工具并且看到了关于它的坏评论,这意味着电池使用情况,但我确实尝试过,从log cat它再次进入空闲状态(如果重要)。
请帮助,也许如果我覆盖onPause()活动和onResume()?此外,我从loadInBackground()获取消息,这是来自歌曲的uri,从那里冻结不会继续。
答案如果你让屏幕关闭,当你播放歌曲时,你需要为在Background.so上运行的那个创建Service.Service in Android
上层链接完美描述服务。
【当用户关闭屏幕android时,使应用程序正常工作】服务的例子......
import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.res.Configuration; import android.media.MediaPlayer; import android.net.Uri; import android.os.Build; import android.os.IBinder; import android.support.annotation.RequiresApi; import android.util.Log; import android.widget.Toast; import com.example.divyesh.musiclite.Pojos.SongsList; import java.io.File; import java.io.IOException; /** * Created by Divyesh on 11/18/2017. */public class MediaSongServiece extends Service { SongsList s; private static Boolean destroy = false; private String TAG = "HELLO"; private MusicIntentReceiver reciever; private SharedPreferences prefrence; private static MediaPlayer player; private int thisStartId = 1; private String ss[]; SharedPreferences.Editor editor; public IBinder onBind(Intent arg0) {return null; }public static void requestPlayMedia() { player.start(); }public void requestPauseMedia() { player.pause(); }@Override public void onCreate() { super.onCreate(); reciever = new MusicIntentReceiver(); IntentFilter filter = new IntentFilter(Intent.ACTION_HEADSET_PLUG); registerReceiver(reciever, filter); Log.d("service", "onCreate"); }@Override public void onTaskRemoved(Intent rootIntent) { super.onTaskRemoved(rootIntent); stopSelf(); }@Override public boolean onUnbind(Intent intent) { stopSelf(thisStartId); return super.onUnbind(intent); }public void onStart(Intent intent, int startId) { if (intent.equals(null)) { stopSelf(); } if (destroy == false) { thisStartId = startId; ss = intent.getExtras().getStringArray("getArray"); Log.e(TAG, "onStart: " + ss[0] + ss[1] + "path" + ss[5]); s = new SongsList(); s.setAll(ss); if (player != null) { player.stop(); player.reset(); try { player.setDataSource(getApplicationContext(), Uri.fromFile(new File(s.getPath()))); player.prepare(); } catch (IOException e) { e.printStackTrace(); } player.setLooping(true); player.setVolume(100, 100); player.start(); Log.e(TAG, "onStart: m= isnot null" + player.isPlaying()); } else {player = MediaPlayer.create(getApplicationContext(), Uri.fromFile(new File(s.getPath()))); player.setLooping(true); player.setVolume(100, 100); player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { mediaPlayer.start(); } }); Log.e(TAG, "onStart: m= isnull WE created new player"); } } else { Log.e(TAG, "onelse destroy "); recover(); } }private void recover() { destroy = false; prefrence = getSharedPreferences("SongPrefrence", Context.MODE_PRIVATE); for (int i = 0; i < = 5; i++) { ss[i] = prefrence.getString("" + i, ""); } String currentPose = prefrence.getString("current_pos", ""); Log.e(TAG, "recover: Shared Daata is" + ss[5] + "_______" + currentPose); }@Override public void onDestroy() {unregisterReceiver(reciever); player.stop(); player.release(); stopSelf(thisStartId); }@Override public void onLowMemory() {}@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { prefrence = getSharedPreferences("SongPrefrence", Context.MODE_PRIVATE); editor = prefrence.edit(); destroy = true; } if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { prefrence = getSharedPreferences("SongPrefrence", Context.MODE_PRIVATE); editor = prefrence.edit(); destroy = true; } }@RequiresApi(api = Build.VERSION_CODES.M) private void saveData() { player.pause(); for (int i = 0; i < ss.length; i++) { editor.putString("" + i, ss[i]); } editor.putString("current_pos", "" + player.getCurrentPosition()); editor.commit(); }public class MusicIntentReceiver extends BroadcastReceiver { public String TAG = "ss"; @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) { int state = intent.getIntExtra("state", -1); switch (state) { case 0: Log.d(TAG, "Headset is unplugged"); Toast.makeText(context, " Headset is unpluged ", Toast.LENGTH_SHORT).show(); Log.e(TAG, "onReceive: " + " is play song " + player.isPlaying()); break; case 1: Log.d(TAG, "Headset is plugged"); break; default: Log.d(TAG, "I have no idea what the headset state is"); } } } } }


    推荐阅读