Android服务正在运行,但叠加活动会轻弹并消失

时间:2017-07-17 14:22:01

标签: java android android-activity android-service android-broadcast

背景信息:我正在尝试创建服务。我在我的主要活动中创建它。我知道该服务正在运行,因为通知正在显示。所以服务在任何时候都不会停止。

我想要发生的事情:当屏幕被锁定/关闭时,我希望在重新开启屏幕时显示某项活动。

发生了什么:首先,当主要活动显示屏幕重新开启,然后我想要的活动显示在那里。我不希望在打开屏幕时显示主要活动。

然后我改变了一些事情:现在所需的活动在主屏幕上闪烁然后消失。它似乎非常不可靠,只有几次。

这应该是足够的信息,这是目前为止的代码(特别是onReceive())

public class OverlayService extends Service{

//IN THIS CLASS CHECK WHETHER LOCK BUTTON WAS PRESSED OR IF PHONE WHEN TO SLEEP.. UPON AWAKENING START THE OVERLAY ACTIVITY...
private BroadcastReceiver mReceiver;
private boolean isShowing = false;

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

private WindowManager windowManager;
WindowManager.LayoutParams params;

@Override
public void onCreate() {
    super.onCreate();

    windowManager = (WindowManager)getSystemService(WINDOW_SERVICE);

    //Register receiver for determining screen off and if user is present
    mReceiver = new OverlayStateReceiver();
    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
    filter.addAction(Intent.ACTION_USER_PRESENT);
    filter.addAction(Intent.ACTION_SCREEN_ON);

    registerReceiver(mReceiver, filter);
    makeNotification();
}

void makeNotification() {
    Notification notification = new NotificationCompat.Builder(this)
            //TODO change icon
            .setSmallIcon(R.drawable.test)
            .setContentTitle("App")
            .setContentText("service is running...")
            .setPriority(Notification.PRIORITY_LOW)
            .build();
    startForeground(1, notification);
}


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return START_STICKY;
}

public class OverlayStateReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            Log.i("app", "load view");
            showOverlayActivity(context);
        }
    }
}

private void showOverlayActivity(Context context) {
    Intent intent = new Intent(context, OverlayActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
}

@Override
public void onDestroy() {
    //unregister receiver when the service is destroy
    if (mReceiver != null) {
        unregisterReceiver(mReceiver);
    }

    //TODO remove view if it is showing and the service is destroy

    super.onDestroy();
}
}

0 个答案:

没有答案