[mobile] add service for keep play

pull/137/head
FongMi 3 years ago
parent c7fb8cb4b2
commit dba8503a02
  1. 2
      app/src/main/java/com/fongmi/android/tv/App.java
  2. 10
      app/src/main/java/com/fongmi/android/tv/utils/Notify.java
  3. 11
      app/src/mobile/AndroidManifest.xml
  4. 37
      app/src/mobile/java/com/fongmi/android/tv/service/PlaybackService.java
  5. 19
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  6. 13
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  7. 4
      app/src/mobile/java/com/fongmi/android/tv/utils/PiP.java

@ -11,6 +11,7 @@ import androidx.annotation.Nullable;
import androidx.core.os.HandlerCompat;
import com.fongmi.android.tv.ui.activity.CrashActivity;
import com.fongmi.android.tv.utils.Notify;
import com.fongmi.android.tv.utils.Prefers;
import com.github.catvod.bean.Doh;
import com.github.catvod.net.OkHttp;
@ -76,6 +77,7 @@ public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
Notify.createChannel();
OkHttp.get().setDoh(this, Doh.objectFrom(Prefers.getDoh()));
CaocConfig.Builder.create().backgroundMode(CaocConfig.BACKGROUND_MODE_SILENT).errorActivity(CrashActivity.class).apply();
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

@ -1,6 +1,9 @@
package com.fongmi.android.tv.utils;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.os.Build;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.widget.Toast;
@ -13,6 +16,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
public class Notify {
public static final String DEFAULT = "default";
private AlertDialog mDialog;
private Toast mToast;
@ -24,6 +28,12 @@ public class Notify {
return Loader.INSTANCE;
}
public static void createChannel() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) return;
NotificationManager notifyMgr = (NotificationManager) App.get().getSystemService(Context.NOTIFICATION_SERVICE);
notifyMgr.createNotificationChannel(new NotificationChannel(DEFAULT, "預設", NotificationManager.IMPORTANCE_HIGH));
}
public static void show(int resId) {
if (resId != 0) show(ResUtil.getString(resId));
}

@ -7,6 +7,8 @@
android:required="false" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<application>
@ -88,5 +90,14 @@
android:name="com.android.cast.dlna.dmc.DLNACastService"
android:exported="false" />
<service
android:name=".service.PlaybackService"
android:exported="true"
android:foregroundServiceType="mediaPlayback">
<intent-filter>
<action android:name="androidx.media3.session.MediaSessionService" />
</intent-filter>
</service>
</application>
</manifest>

@ -0,0 +1,37 @@
package com.fongmi.android.tv.service;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import androidx.core.content.ContextCompat;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.utils.Notify;
public class PlaybackService extends Service {
public static void start() {
ContextCompat.startForegroundService(App.get(), new Intent(App.get(), PlaybackService.class));
}
public static void stop() {
App.get().stopService(new Intent(App.get(), PlaybackService.class));
}
@Override
public void onCreate() {
super.onCreate();
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, Notify.DEFAULT).setVisibility(NotificationCompat.VISIBILITY_PUBLIC).setSmallIcon(R.drawable.ic_logo);
startForeground(9527, builder.build());
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}

@ -50,6 +50,7 @@ import com.fongmi.android.tv.model.SiteViewModel;
import com.fongmi.android.tv.player.ExoUtil;
import com.fongmi.android.tv.player.Players;
import com.fongmi.android.tv.receiver.PiPReceiver;
import com.fongmi.android.tv.service.PlaybackService;
import com.fongmi.android.tv.ui.adapter.EpisodeAdapter;
import com.fongmi.android.tv.ui.adapter.FlagAdapter;
import com.fongmi.android.tv.ui.adapter.ParseAdapter;
@ -1302,18 +1303,24 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
protected void onStart() {
super.onStart();
setStop(false);
if (PiP.isIn(this)) return;
mPlayers.play();
Clock.start();
if (PiP.isIn(this)) {
PlaybackService.stop();
} else {
mPlayers.play();
Clock.start();
}
}
@Override
protected void onStop() {
super.onStop();
setStop(true);
if (PiP.isIn(this)) return;
mPlayers.pause();
Clock.stop();
if (PiP.isIn(this)) {
PlaybackService.start();
} else {
mPlayers.pause();
Clock.stop();
}
}
@Override

@ -40,6 +40,7 @@ import com.fongmi.android.tv.player.source.Force;
import com.fongmi.android.tv.player.source.TVBus;
import com.fongmi.android.tv.player.source.ZLive;
import com.fongmi.android.tv.receiver.PiPReceiver;
import com.fongmi.android.tv.service.PlaybackService;
import com.fongmi.android.tv.ui.adapter.ChannelAdapter;
import com.fongmi.android.tv.ui.adapter.GroupAdapter;
import com.fongmi.android.tv.ui.base.BaseActivity;
@ -867,14 +868,22 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
protected void onStart() {
super.onStart();
setStop(false);
if (PiP.notIn(this)) mPlayers.play();
if (PiP.isIn(this)) {
PlaybackService.stop();
} else {
mPlayers.play();
}
}
@Override
protected void onStop() {
super.onStop();
setStop(true);
if (PiP.notIn(this)) mPlayers.pause();
if (PiP.isIn(this)) {
PlaybackService.start();
} else {
mPlayers.pause();
}
}
@Override

@ -35,10 +35,6 @@ public class PiP {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && activity.isInPictureInPictureMode();
}
public static boolean notIn(Activity activity) {
return Build.VERSION.SDK_INT < Build.VERSION_CODES.O || !activity.isInPictureInPictureMode();
}
private boolean noPiP() {
return Build.VERSION.SDK_INT < Build.VERSION_CODES.O || !App.get().getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE);
}

Loading…
Cancel
Save