Что может привести к тому, что startTaskLock прикрепит, а затем немедленно открепит действие?

Я пытался использовать блокировку / закрепление задачи Android 6.0, чтобы заблокировать свою деятельность. Кажется, работает ненадежно. Иногда, когда я запускаю свое приложение, оно прикрепляется, и все скрыто, как и должно быть. В других случаях это пытается, но на самом деле это не так. Например, я получаю тост с надписью "Экран закреплен", за которым сразу следует тост с надписью "Экран закреплен". Конечным результатом является то, что приложение не закреплено полностью (скрывая значки переключения между домом и задачами). Но как только он попадает в этот цикл, кажется, что он не работает, даже если я продолжаю пытаться. Это также проблема при загрузке, аналогичная той, о которой сообщается здесь:

Android пин-активность при загрузке

Есть ли способ сказать, что заставляет Android открепить мою деятельность? Это разочаровывает, потому что это не дает никаких указаний, почему это не работает.

1 ответ

Наш планшет Lenovo не смог закрепить задачу, в которой жил домашний актив. Решение состояло в том, чтобы иметь два действия в двух различных задачах.

Домашняя активность

Это действие запускается при загрузке в качестве средства запуска, и единственной обязанностью является немедленное открытие основного действия. Обратите внимание, что он прозрачный и имеет различную привязку к задаче.

<activity
    android:name=".HomeActivity"
    android:clearTaskOnLaunch="true"
    android:configChanges="orientation|screenSize"
    android:launchMode="singleTask"
    android:resumeWhilePausing="true"
    android:stateNotNeeded="true"
    android:taskAffinity="${applicationId}.home"
    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>

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

Деятельность запустит Основную деятельность в своем onCreate а также onNewIntent а также (потому что это singleTask деятельность). Вот код в Котлине:

class HomeActivity : Activity() {
    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)
        handleIntent(intent)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        handleIntent(intent)
    }

    private fun handleIntent(intent: Intent) {
        val i = packageManager.getLaunchIntentForPackage(packageName)
        startActivity(i)
    }
}

Основная деятельность

Это ваше основное занятие - главная точка входа в ваше приложение, его можно запустить с любого запуска. Он имеет задание по умолчанию (равное идентификатору приложения).

<activity
    android:name=".webview.activity.RealWebViewActivity"
    android:clearTaskOnLaunch="true"
    android:configChanges="orientation|screenSize"
    android:exported="false"
    android:launchMode="singleTask"
    android:resumeWhilePausing="true"
    android:stateNotNeeded="true">

    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>

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

</activity>
Другие вопросы по тегам