เริ่มต้นแอปของคุณเมื่อบูต
วิธีที่ดีที่สุดในการทำสิ่งนี้คือการตั้งค่าแอปของคุณเป็นตัวเรียกใช้งาน
<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
ก่อนอื่นคุณต้องตั้งค่าแอปของคุณเป็นเจ้าของอุปกรณ์ หมายเหตุอุปกรณ์ของคุณต้องยกเลิกการจัดสรร: หากคุณลงทะเบียนคุณควรรีเซ็ตเป็นค่าเริ่มต้นจากโรงงานและข้ามการลงทะเบียนบัญชี
เพื่อให้สามารถลงทะเบียนแอพของคุณได้คุณต้องตั้งค่าคอมโพเนนต์ 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 ( ไม่จำเป็นต้องรูท )
adb shell dpm set-device-owner com.example.myapp/.MyDeviceAdminReceiver
เพื่อหลีกเลี่ยงไม่ให้ Android ขอสิทธิ์ผู้ใช้เพื่อตรึงแอปของคุณคุณต้องเรียก 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();
}