在屏幕被锁定时从服务重复启动活动时出现问题

时间:2017-11-22 07:25:11

标签: android android-activity android-service

我有两项服务" home"并且"警告"。家庭服务扫描附近的蓝牙设备的数字(1,2或3)。警报服务扫描蓝牙以获取0。

扫描1,2或3时,家庭服务停止,并根据号码启动新活动。警报服务已启动。

当读取0时,警报服务停止并将用户返回到主活动。家庭服务重新启动。

我的问题,每次都发生,是当我尝试从手机锁定第二次启动警报时,活动不会启动。请参阅下面的列表,以便您进一步了解。

1-家庭服务和mainActivity正在后台运行,手机已锁定

2-蓝牙读入1

3-停止服务,启动警报服务,启动警报屏幕1活动

4-警报服务读入0

5-警报服务已停止,家庭服务已启动,mainActivity活动已启动

6-家庭服务读取1

7- 家庭服务停止,警报屏幕1活动无法启动

如果在锁定屏幕上开始活动后解锁手机,手机将无法启动活动。我可以在此之后启动警报屏幕活动2或3,但不是警报屏幕1。

如果我在解锁屏幕的情况下运行我的应用程序,一切正常。

警报屏幕1活动onCreate

    @Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    setContentView(R.layout.activity_yellow_flash);

家庭服务onStartCommand 此服务已启动,但该线程完成所有工作。当线程扫描值为1时,我调用一个方法来启动一个新活动。此方法的最后一行会中断线程,从而停止服务。

    @Override
public int onStartCommand(Intent intent, int flags, int startID){
    Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();

    Intent notifyIntent = new Intent(this, MainActivity.class);

    PendingIntent PI = PendingIntent.getActivity(this, 0, notifyIntent, 0);

    Notification notification = new NotificationCompat.Builder(this)
            .setSmallIcon(R.mipmap.notify_lockout)
            .setContentTitle("Lockout Application")
            .setContentText("Running Services...")
            .setContentIntent(PI).build();

    Random random = new Random();
    int notificationID = random.nextInt(9999 - 1000) + 1000;

    startForeground(notificationID, notification);

    // Start Thread
    thread = new Thread(new Threader(startID));
    thread.start();

    return START_STICKY;
}

该线程调用startActivity()方法,如下所示:

startAssistanceAlertActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(startAssistanceAlertActivity);
                Log.e("Test", "Called startActivity");

在启动活动失败期间,测试日志在logcat中可见。所以,我不得不想知道为什么活动会开始一次,但是再也不会,不管我打开手机了。

有关于此的任何想法吗?如果您想查看某些特定代码,请与我们联系。

1 个答案:

答案 0 :(得分:0)

识别问题:

您第一次使用startActivity()启动了Alert Screen 1 activity,并将其工作也添加到了堆栈中。

如果你尝试再次启动它就不会出现。

为什么会这样?

第一次使用startActivity()会弹出活动,因为它不在堆栈中,第二次它只会添加到堆栈顶部,因此如果您尝试从图标中午餐应用程序,它将显示此活动。

<强>解决方案:

每次开始其他服务时从堆栈中清除它,或在开始活动时使用Intent.FLAG_ACTIVITY_CLEAR_TASK