Stop MediaPlayer service when app goes in Background

前端 未结 5 1094
不思量自难忘°
不思量自难忘° 2020-12-10 21:25

I have a media player service that plays music in the background of my app throughout activities like :

public class Music extends Service {
MediaPlayer play         


        
5条回答
  •  温柔的废话
    2020-12-10 22:09

    You could add this in your application class to check whether your app is in the foreground or not.

    public class MyLifecycleHandler implements Application.ActivityLifecycleCallbacks {
        private static int resumed;
        private static int paused;
        private static int started;
        private static int stopped;
    
        private static String currentActivity;
    
        public static String getCurrentActivity() {
            return currentActivity;
        }
    
        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
            currentActivity = activity.getClass().getSimpleName();
        }
    
        @Override
        public void onActivityDestroyed(Activity activity) {
        }
    
        @Override
        public void onActivityResumed(Activity activity) {
            ++resumed;
        }
    
        @Override
        public void onActivityPaused(Activity activity) {
            ++paused;
            android.util.Log.w("test", "application is in foreground: " + (resumed > paused));
    
            // send broadcast from here to the service
            sendBroadcast()
        }
    
        @Override
        public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
        }
    
        @Override
        public void onActivityStarted(Activity activity) {
            ++started;
        }
    
        @Override
        public void onActivityStopped(Activity activity) {
            ++stopped;
            android.util.Log.w("test", "application is visible: " + (started > stopped));
        }
    
        public static boolean isApplicationVisible() {
            return started > stopped;
        }
    
        public static boolean isApplicationInForeground() {
            return resumed > paused;
        }
    }
    

    Add this to your application like this :

    public class MyApplication extends Application {
    
        @Override
        public void onCreate() {
            super.onCreate();
    
            registerActivityLifecycleCallbacks(new MyLifecycleHandler());
        }
    }
    

    On receiving the broadcast in service you can stop mediaplayer.

    Edit

    You need to change your application class to this :

    public class app_class extends Application implements Application.ActivityLifecycleCallbacks {
        private static int resumed;
        private static int paused;
    
        private static String currentActivity;
    
        @Override
        public void onCreate() {
            super.onCreate();
            registerActivityLifecycleCallbacks(this);
        }
    
        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
            currentActivity = activity.getClass().getSimpleName();
        }
        public static String getCurrentActivity() {
            return currentActivity;
        }
        @Override
        public void onActivityStarted(Activity activity) {
        }
        @Override
        public void onActivityResumed(Activity activity) {
            send_status(1);
        }
    
        @Override
        public void onActivityPaused(Activity activity) {
            send_status(0);
        }
        private void send_status(int status_counter) {
            Intent intent = new Intent("status");
            intent.putExtra("status", String.valueOf(status_counter));
            LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
        }
        @Override
        public void onActivityStopped(Activity activity) {
    
        }
        @Override
        public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
    
        }
        @Override
        public void onActivityDestroyed(Activity activity) {
    
        }
    }
    

提交回复
热议问题