我试着做一个24小时工作的服务,它一直在工作,直到我更新到Android 12。我已经检查了新的前景限制,但仍然不明白为什么它不工作,因为我是从一个活动开始它。
活动
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class TestActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
startForegroundService(new Intent(TestActivity.this, TestService.class));
}
}
服务
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.media.MediaBrowserCompat;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import androidx.media.MediaBrowserServiceCompat;
import java.util.List;
public class TestService extends MediaBrowserServiceCompat {
@Override
public BrowserRoot onGetRoot(@NonNull String clientPackageName, int clientUid, @Nullable Bundle rootHints) { return null; }
@Override
public void onLoadChildren(@NonNull String parentId, @NonNull Result<List<MediaBrowserCompat.MediaItem>> result) { result.sendResult(null); }
@Override
public int onStartCommand(Intent ii, int flags, int startId) {
//CREATE NOTI CHANNEL
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(
"test", "Test Notifications",
NotificationManager.IMPORTANCE_HIGH);
((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(channel);
}
//CREATE NOTI
Notification notification = new NotificationCompat.Builder(this, "test")
.setSmallIcon(R.drawable.icon)
.setContentTitle("title")
.setContentText("test")
.setChannelId("test")
.setOngoing(true)
.setSilent(true)
.build();
//START FOREGROUND
startForeground(101, notification);
return START_STICKY;
}
}
我试着用这几行代码创建一个新的应用程序,它工作得很好,所以它一定是其他的东西,使服务在一分钟后关闭。
发布于 2022-08-30 23:13:29
事实证明,三星让我的应用程序进入深度睡眠状态,如果不使用一分钟,它就会关闭自己。同时也要感谢那些花时间尝试和帮助的人们。
发布于 2022-08-30 21:30:37
尽管您在这里需要前台服务是正确的,但似乎您希望它在后台的任何时候都能保持活力,或者根本不运行,因为您不打算让您的应用程序24/7运行,是吗?
由于您似乎试图在示例中使用MediaBrowserServiceCompat
,因此我建议您使用MediaSessionCompat
的配套实例,以便让媒体会话独立控制服务的生命周期。
在安卓系统中,实现媒体服务并不是最简单的任务;他们仍在试图解决最新发布的安卓13的一些主要问题。因此,如果你试图创建一个带有媒体前台服务的音频应用程序,我也建议你遵循这是官方的Android指南。
https://stackoverflow.com/questions/73546895
复制相似问题