Khởi động ứng dụng của bạn khi khởi động
cách TỐT NHẤT để thực hiện điều này là đặt ứng dụng của bạn làm trình khởi chạy
<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>
Khóa ứng dụng của bạn
cách đáng tin cậy nhất là sử dụng thiết bị có Lollipop trở lên và tận dụng
startLockTask
trước tiên, bạn phải đặt ứng dụng của mình làm chủ sở hữu thiết bị. NB thiết bị của bạn phải được cấp phép: nếu bạn đã đăng ký, bạn nên khôi phục cài đặt gốc và bỏ qua đăng ký tài khoản.
để có thể đăng ký ứng dụng của mình, trước tiên bạn phải thiết lập thành phần 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!
}
}
khi bạn có một thiết bị chưa được cấp phép, bạn có thể khởi chạy lệnh sau từ adb ( không cần root )
adb shell dpm set-device-owner com.example.myapp/.MyDeviceAdminReceiver
để tránh việc android yêu cầu quyền người dùng ghim ứng dụng của bạn, bạn phải gọi setLockTaskPackages
cuối cùng!
@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();
}