如何解决在Boot api 29
我尝试通过 BroadcastReceiver 在启动时启动 ForegroundService 。我已经在装有Android 8的设备和模拟的Android 10设备上尝试过此操作。两者都工作正常。问题是,此代码在我的Android 10 Galaxy S9上不起作用。我已经调试了所有内容,包括 BroadcastReceiver 和 OnStartCommand 方法,但是如果 BroadcastReceiver 运行的代码很好,则 OnStartCommand >方法无法开始运行。 我有一个mainActivity,用户必须在其中应用此流程,以便在 BroadcastReceiver 正常工作之前打开应用一次。 我尝试了在这里找到的几乎所有解决方案,但没有任何解决方案。 我不明白为什么这可以在某些设备上使用,但不能在每个设备上使用。我希望有人能帮助我!
我的最小API是26。
广播接收器
public class Restarter extends BroadcastReceiver {
@Override
public void onReceive(Context context,Intent intent) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Intent intentt = new Intent (context,MyService.class);
intentt.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startForegroundService(intentt);
} else {
Intent intentt = new Intent (context,MyService.class);
intentt.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startService(intentt);
}
}
}
服务
public class MyService extends Service {
public static final String CHANNEL_ID = "exampleServiceChannel";
@Override
public void onCreate() {
super.onCreate();
Log.d("WhereAreWe","create");
createNotificationChannel();
}
private void createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel serviceChannel = new NotificationChannel(
CHANNEL_ID,"Foreground Service Channel",NotificationManager.IMPORTANCE_DEFAULT
);
NotificationManager manager = getSystemService(NotificationManager.class);
manager.createNotificationChannel(serviceChannel);
}
}
@Override
public int onStartCommand(Intent intent,int flags,int startId) {
super.onStartCommand(intent,flags,startId);
Log.d("WhereAreWe","StartCommand");
SharedPreferences check = getSharedPreferences("Checked",Context.MODE_PRIVATE);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O){
Intent intents = new Intent(this,MainActivity.class);
intents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(this,intents,0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this,"newid")
.setSmallIcon(R.drawable.ic_android)
.setContentTitle("Foreground Service")
.setContentText("Example text")
.setOngoing(true)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setContentIntent(pendingIntent);
startForeground(1,builder.build());
}else{
startForeground(1,new Notification());
}
}
}
清单
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.MyApplication">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<application
.
.
.
<receiver
android:name=".Restarter"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="restartservice" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<service
android:name=".MyService"
android:enabled="true"
android:exported="true"
android:stopWithTask="false" />
</application>
</manifest>
解决方法
在您的android:usesCleartextTraffic="true"
application
中设置manifest
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。