我對Android非常新,我目前正在開發一款應用程序,該應用程序應該在KioskMode中運行,以便普通用戶無法退出應用程序或執行任何操作在它之外。
我已經做了:Android Kiosk模式 - 防止用戶「未經授權」取消固定應用程序
- 我把我的應用程序的設備所有者
- 我「屏幕針」在OnCreate()的應用程序 - 方法在MainActivity作爲設備所有者
- 我有MainActivity中的一個按鈕,稍後通過輸入密碼允許管理員退出。調用stopLockTask()
我現在遇到的,任何用戶都可以退出屏幕,只需長按「後退」,同時,「多任務處理」按鈕,因爲該應用程序應該運行在平板電腦具有hardwarebuttons釘扎問題我不能簡單地停用。 (至少我不知道如何做到這一點沒有根植設備)
那麼有沒有什麼辦法來停用這個按鈕組合來退出屏幕鎖定,或者一些整潔的解決方法? 我想到的一種方法是在onLockTaskModeExiting()的AdminReceiver類中重新編寫應用程序,但我仍然堅持如何執行此操作。
這裏是我的MainActivity的某些代碼段和AdminReceiver類:
AdminReceiver.java
public class AdminReceiver extends DeviceAdminReceiver{
@Override
public void onEnabled(Context context, Intent intent) {
Toast.makeText(context, context.getString(R.string.device_admin_enabled), Toast.LENGTH_SHORT).show();
}
@Override
public CharSequence onDisableRequested(Context context, Intent intent) {
return context.getString(R.string.device_admin_warning);
}
@Override
public void onDisabled(Context context, Intent intent) {
Toast.makeText(context, context.getString(R.string.device_admin_disabled), Toast.LENGTH_SHORT).show();
}
@Override
public void onLockTaskModeEntering(Context context, Intent intent, String pkg) {
Toast.makeText(context, context.getString(R.string.kiosk_mode_enabled), Toast.LENGTH_SHORT).show();
}
@Override
public void onLockTaskModeExiting(Context context, Intent intent) {
Toast.makeText(context, context.getString(R.string.kiosk_mode_disabled), Toast.LENGTH_SHORT).show();
}
}
MainActivity.java
public class MainActivity extends Activity {
private DevicePolicyManager mDpm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ComponentName deviceAdmin = new ComponentName(this, AdminReceiver.class);
mDpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
if (!mDpm.isAdminActive(deviceAdmin)) {
Toast.makeText(this, getString(R.string.not_device_admin), Toast.LENGTH_SHORT).show();
}
if (mDpm.isDeviceOwnerApp(getPackageName())) {
Toast.makeText(this, getString(R.string.device_owner), Toast.LENGTH_SHORT).show();
mDpm.setLockTaskPackages(deviceAdmin, new String[]{getPackageName()});
startLockTask();
} else {
Toast.makeText(this, getString(R.string.not_device_owner), Toast.LENGTH_SHORT).show();
}
Button exit = (Button) findViewById(R.id.exit);
exit.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
stopLockTask();
}
});}
任何幫助,高度讚賞。謝謝!
如何將您的應用程序設置爲設備所有者?如果您的應用程序實際設置爲設備所有者,則最近的按鈕也將被隱藏。有關更多信息,請參閱示例DPC。 – bmg
@Phil,是啊你是如何設置設備所有者? – portfoliobuilder