起動時にアプリを起動する
これを達成する最良の方法は、アプリをランチャーとして設定することです
<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();
}