Android InstantApp:前台服务

时间:2017-06-20 14:36:19

标签: android service android-instant-apps foreground-service

无法在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();
    }
}

1 个答案:

答案 0 :(得分:2)

您的代码是正确的,但由于Instant Apps主管中存在已知问题,Foreground服务暂时无法正常工作。