, лучший способ выполнить это - установить ваше приложение в качестве запуска
<activity ...
android:launchMode="singleInstance"
android:windowActionBar="false">
<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>
больше всего надежным способом является использование устройства с Lollipop или выше и использование
startLockTask
сначала вы должны установить свое приложение в качестве владельца устройства. NB, ваше устройство должно быть недоступно: если вы его зарегистрировали, вы должны сделать заводской сброс и пропустить регистрацию учетной записи.
, чтобы иметь возможность зарегистрировать свое приложение, вы должны сначала настроить компонент DeviceAdminReceiver:
package com.example.myapp;
public class MyDeviceAdminReceiver extends android.app.admin.DeviceAdminReceiver {
@Override
public void onEnabled(Context context, Intent intent) {
Toast.makeText(context, "Device admin permission received", Toast.LENGTH_SHORT).show();
}
@Override
public CharSequence onDisableRequested(Context context, Intent intent) {
return "are you sure?";
}
@Override
public void onDisabled(Context context, Intent intent) {
Toast.makeText(context, "Device admin permission revoked", Toast.LENGTH_SHORT).show();
}
@Override
public void onLockTaskModeExiting(Context context, Intent intent) {
// here you must re-lock your app. make your activity know of this event and make it call startLockTask again!
}
}
после того, как у вас есть незапрошенное устройство, вы можете запустить следующую команду из adb (не требуется root)
adb shell dpm set-device-owner com.example.myapp/.MyDeviceAdminReceiver
, чтобы избежать андроида, запрашивающего разрешения пользователя на подключение вашего приложения, вы должны вызвать setLockTaskPackages
наконец!
@Override
public void onResume(){
super.onResume();
DevicePolicyManager mDevicePolicyManager = (DevicePolicyManager) getSystemService(
Context.DEVICE_POLICY_SERVICE);
ComponentName mAdminComponentName = new ComponentName(getApplicationContext(), MyDeviceAdminReceiver.class);
mDevicePolicyManager.setLockTaskPackages(mAdminComponentName, new String[]{getPackageName()});
startLockTask();
}
@Override
public void finish(){
stopLockTask();
super.finish();
}
Мне пришлось ждать 4-5 месяцев. так что это выглядит довольно стандартно для такого длительного периода ожидания.