2017-05-05 49 views
0

我的Android應用程序有設備所有者狀態,並且可以在kiosk模式下通過調用startLockTask()如何在調用新應用程序時讓Android以Kiosk模式運行?

我試圖找出是如何調用從我的應用程序另一個應用程序,並保持它在kiosk模式下運行。我是否可以設置任何標誌來讓我的這個新應用保持在同一個任務中?目前它不會讓我打電話給我的應用程序,因爲在Kiosk模式下不允許取消固定。

我還不能說在此應用程序stopLockTask()然後startLockTask()在其他應用程序,因爲其他應用程序不會是設備所有者(除非......我可以有一個以上的設備擁有者?)

回答

0

找到了解決方案。以下是我的方法。

private void enableKioskMode() { 

    ComponentName deviceAdmin = new ComponentName(this, AdminReceiver.class); 
    DevicePolicyManager mDpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); 

    // First of all, to access anything you must be device owner 
    if (mDpm.isDeviceOwnerApp(getPackageName())) { 

     // If not device admin, ask to become one 
     if (!mDpm.isAdminActive(deviceAdmin) && 
       mDpm.isDeviceOwnerApp(getPackageName())) { 

      Log.v(TAG, "Not device admin. Asking device owner to become one."); 

      Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
      intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdmin); 
      intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, 
        "You need to be a device admin to enable kiosk mode."); 

      startActivity(intent); 
     } 

     // Device owner and admin : enter kiosk mode 
     else { 
      mDpm.setLockTaskPackages(deviceAdmin, new String[]{ 
        getPackageName(), /** PUT OTHER PACKAGE NAMES HERE! */ 
      }); 
      startLockTask(); 
     } 
    } 

    // Not device owner - can't access anything 
    else { 
     Log.v(TAG, "Not device owner"); 
     Toast.makeText(this, "Not device owner", Toast.LENGTH_SHORT).show(); 
    } 
} 

所有你需要做的就是把你想在Kiosk模式在mDpm.setLockTaskPackages()創建的上述String[]運行任何其他應用程序的包名。接下來,請確保您在向另一個應用程序發送意向之前致電stopLockTask()。否則,您將無法離開此應用程序,因爲它已被鎖定。

然後,您只需撥打String[]中的任何應用程序即可撥打startLockTask()。與其詢問是否要固定這些應用程序,主頁和最近的應用程序按鈕將消失,並且會直接鎖定到自助服務終端模式。請記得在完成後致電stopLockTask()

相關問題