应用程序在后台时服务未打开 activity

Service not opening activity while app in background

我有一个 broadcastReceiver 在到达时间时打开服务。

如果应用程序已打开并且 运行 在前台,则会调用该服务,然后调用 activity。

如果应用程序已打开但 运行 在后台,则会调用服务但不会打开应用程序。

服务: classAlarmRingService:服务(){

override fun onCreate() {
    super.onCreate()
}

override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
    val ringIntent = Intent(this, AlarmRingActivity::class.java)
    ringIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    startActivity(ringIntent)
    Toast.makeText(this, "activity should have started", Toast.LENGTH_LONG).show()
    return START_STICKY
}

override fun onDestroy() {
    super.onDestroy()
}

override fun onBind(intent: Intent): IBinder? {
    return null
}
}

即使在应用程序在后台打开的情况下查看手机主屏幕时也会调用 toast。

Activity:

    lateinit var binding: ActivityAlarmRingBinding
private val fragmentManager = supportFragmentManager


@RequiresApi(Build.VERSION_CODES.O)
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityAlarmRingBinding.inflate(layoutInflater)
    setContentView(binding.root)
    supportActionBar?.title = ""

    val prefs: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

    Toast.makeText(this, "activity started", Toast.LENGTH_LONG).show()

    if (prefs.getBoolean("sp_shake", true)) {
        val fragmentTransaction = fragmentManager.beginTransaction()
        fragmentTransaction.add(R.id.fragmentContainerViewAlarm, ShakeAlarmRingFragment())
        fragmentTransaction.addToBackStack(null)
        fragmentTransaction.commit()
    } else {
        val fragmentTransaction = fragmentManager.beginTransaction()
        fragmentTransaction.add(R.id.fragmentContainerViewAlarm, AlarmRingFragment())
        fragmentTransaction.addToBackStack(null)
        fragmentTransaction.commit()
    }
}

override fun onBackPressed() {
    // back not allowed
}

}

我在其他地方看到这在小米手机上不起作用,这是我进行物理测试的地方,但在模拟器中测试多部手机也会产生相同的结果。

如评论中所述,在 Android 10.

之后无法真正解决此问题

您需要打开一个可以启动您的 activity 的通知。

虽然在闹钟的情况下,振动和铃声等仍然可以从服务中调用,只是不是 activity 本身。