Broadcast Receiver не запускает активность, когда приложение не запущено - PullRequest
1 голос
/ 31 октября 2019

Я пытаюсь открыть действие через Broadcast Receiver.

Вот манифест:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.andreasgift.myclock">

    <uses-permission android:name="com.android.alarm.permission.SET_ALARM" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@drawable/ic_launcher"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".Alarm.AlarmNotifActivity" />
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SET_ALARM" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

        <receiver android:name=".Alarm.AlarmReceiver" />
    </application>

</manifest>

Вот действие, которое я пытаюсь запустить

class AlarmNotifActivity : AppCompatActivity() {
    private val snoozeTiming = 600000L

    private var label: String? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        Log.d("ALARM","alarmnotif activity")
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_alarm_notif)

        intent.getStringExtra(Constants().ALARM_LABEL_KEY)?.let {
            label = it
            this.label_tv.setText(label)
        }
    }

    override fun onResume() {
        super.onResume()
        Log.d("ALARM","RESUME ACR")
    }

    override fun onStart() {
        super.onStart()
        Log.d("ALARM","ON START")
    }

    fun dismissButton(view: View) {
        finish()
    }

    fun snoozeButton(view: View) {
        val alarmManager = this.getSystemService(Context.ALARM_SERVICE) as AlarmManager
        val nextintent = Intent(this, AlarmReceiver::class.java)
        label?.let { intent.putExtra(Constants().ALARM_LABEL_KEY, label) }
        val pendingIntent = PendingIntent.getBroadcast(
            this@AlarmNotifActivity,
            0,
            nextintent,
            PendingIntent.FLAG_UPDATE_CURRENT
        )
        alarmManager.set(
            AlarmManager.RTC_WAKEUP,
            System.currentTimeMillis() + snoozeTiming,
            pendingIntent
        )
        finish()
    }
}

А вот класс Broadcast Receiver:

class AlarmReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        val openNext = Intent(context, AlarmNotifActivity::class.java)
        openNext.putExtra(Constants().ALARM_LABEL_KEY, intent.getStringExtra(Constants().ALARM_LABEL_KEY))
        openNext.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        context.startActivity(openNext)
        Log.d("ALARM","Broadcast receiver working")
    }
}

Функция работает нормально, когда приложение открыто. Однако кажется, что не будет выполнять startActivity (Intent), когда приложение закрыто. Но он выполнил последний log.d в приемнике вещания.

Я попытался заменить контекст на context.applicationContext, но это ничего не изменило. Я пытался заменить класс деятельности на другой вид деятельности, но также не удалось. Я попытался заменить действие из открытой деятельности показом тоста. Тост показан, работает отлично.

Вот logcat после того, как Broadcast Receiver выполнит onReceive

2019-11-05 16:42:29.962 1992-3189/system_process I/ActivityTaskManager: START u0 {flg=0x10000000 cmp=com.andreasgift.myclock/.Alarm.AlarmNotifActivity (has extras)} from uid 10133
2019-11-05 16:42:29.962 1992-3189/system_process W/ActivityTaskManager: Background activity start [callingPackage: com.andreasgift.myclock; callingUid: 10133; isCallingUidForeground: false; isCallingUidPersistentSystemProcess: false; realCallingUid: 10133; isRealCallingUidForeground: false; isRealCallingUidPersistentSystemProcess: false; originatingPendingIntent: null; isBgStartWhitelisted: false; intent: Intent { flg=0x10000000 cmp=com.andreasgift.myclock/.Alarm.AlarmNotifActivity (has extras) }; callerApp: ProcessRecord{c678bfd 7783:com.andreasgift.myclock/u0a133}]
2019-11-05 16:42:29.963 1992-2036/system_process I/libprocessgroup: Successfully killed process cgroup uid 10095 pid 6926 in 79ms
2019-11-05 16:42:29.964 7783-7783/com.andreasgift.myclock D/ALARM: Broadcast receiver working

У кого-нибудь есть идеи, что здесь не так?

...