diff --git a/app/src/main/java/com/fongmi/android/tv/App.java b/app/src/main/java/com/fongmi/android/tv/App.java
index 94f21db80..88b077593 100644
--- a/app/src/main/java/com/fongmi/android/tv/App.java
+++ b/app/src/main/java/com/fongmi/android/tv/App.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() {
diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Notify.java b/app/src/main/java/com/fongmi/android/tv/utils/Notify.java
index d62129708..bd66dd356 100644
--- a/app/src/main/java/com/fongmi/android/tv/utils/Notify.java
+++ b/app/src/main/java/com/fongmi/android/tv/utils/Notify.java
@@ -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));
}
diff --git a/app/src/mobile/AndroidManifest.xml b/app/src/mobile/AndroidManifest.xml
index 8f7ee5d86..91bec65ef 100644
--- a/app/src/mobile/AndroidManifest.xml
+++ b/app/src/mobile/AndroidManifest.xml
@@ -7,6 +7,8 @@
android:required="false" />
+
+
@@ -88,5 +90,14 @@
android:name="com.android.cast.dlna.dmc.DLNACastService"
android:exported="false" />
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/mobile/java/com/fongmi/android/tv/service/PlaybackService.java b/app/src/mobile/java/com/fongmi/android/tv/service/PlaybackService.java
new file mode 100644
index 000000000..ccb02cdb0
--- /dev/null
+++ b/app/src/mobile/java/com/fongmi/android/tv/service/PlaybackService.java
@@ -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;
+ }
+}
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
index 6e78a8e73..67e4955a3 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
@@ -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
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
index 38bb54ebf..1134b1dae 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
@@ -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
diff --git a/app/src/mobile/java/com/fongmi/android/tv/utils/PiP.java b/app/src/mobile/java/com/fongmi/android/tv/utils/PiP.java
index dffa4512f..7b189d740 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/utils/PiP.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/utils/PiP.java
@@ -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);
}