无法在InstantApp功能模块中使用前台服务。低于运行时安全性异常。
java.lang.RuntimeException:无法启动活动 ComponentInfo {。 .XYZActivity}:java.lang.SecurityException:Method class android.app.ActivityManagerProxy.getServices不可用 即时应用
Android文档说,
受限制的功能:在用户不知情的情况下在设备上运行。 前台服务可用。即时应用只能通过支持应用链接的活动启动,所以服务, 内容提供商或广播接收者将无法启动您的 应用
代码:
// Starting service
getAppContext().startService(new Intent(getAppContext(), FirebaseAuthService.class));
// Foreground service class
public class FirebaseAuthService extends Service {
private static final String TAG = "FirebaseAuthService";
private boolean isRunning = false;
private String mUserId;
private FirebaseAuth mAuth;
@Override
public void onCreate() {
Log.d(TAG, "Service onCreate");
startForeground();
isRunning = true;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "Service onStartCommand");
new Thread(new Runnable() {
@Override
public void run() {
myTask();
}
}).start();
return Service.START_STICKY;
}
@Override
public IBinder onBind(Intent arg0) {
Log.i(TAG, "Service onBind");
return null;
}
@Override
public void onDestroy() {
isRunning = false;
Log.i(TAG, "Service onDestroy");
}
private void startForeground() {
Intent notificationIntent = new Intent(this, HomeActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
Notification notification = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.noti_logo)
.setContentTitle("Title")
.setContentText("Preparing...")
.setContentIntent(pendingIntent).build();
startForeground(1337, notification);
}
private void myTask() {
// At end
// Stop service once it finishes its task
stopSelf();
}
}
答案 0 :(得分:2)
您的代码是正确的,但由于Instant Apps主管中存在已知问题,Foreground服务暂时无法正常工作。