Что может привести к тому, что 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>