Как сделать ограничение, чтобы пользователь мог пользоваться только одной программой? [Android]?

Приветствую, хабрасообщество!

Подскажите как решить следующую задачу:

В идеале, чтобы пользователь мог запускать на устройстве только одну программу.

Или закрыть доступ в интернет всем, кроме этой программы, и удалить все развлечение, и запретить их ставить.

Или дать ограниченные права учетной записи и дать пользоваться только ей.


В общем, чтобы устройство использовали только для работы с этой одной единственной программой.


Я надеюсь, что кто-то уже сталкивался с подобным вопросом и знает как его решить =)
  • Вопрос задан
  • 12886 просмотров
Пригласить эксперта
Ответы на вопрос 8
tehnolog
@tehnolog
Вам нужно смотреть в сторону Kiosk mode. Пишется программа, которая имеет полноэкранный режим, где можно прописать ссылки только на свой сайт и т.д. Но на 100% гарантировать нельзя. Опытный пользователь может найти лазейки.
Ответ написан
arxont
@arxont
C# программист
Пользователю ограниченную учётку по самое не могу. Так же если дело в винде советую начать с замены в реестре shell с explorer на нужную программу и блоком диспетчера задач (через gpedit).
Ответ написан
@anitspam
пользуюсь вот таким play.google.com/store/apps/details?id=com.whisperarts.kidsshell&feature=search_result

можно поискать что-то с похожим функционалом
Ответ написан
Комментировать
@vaail
Ответ написан
Комментировать
freeek
@freeek
А кастомная прошивка не вариант?
Ответ написан
recompileme
@recompileme
оу! я писал такую утилиту. вешаете сервис на онбутлоадер и по таймеру проверяете, если ваш процесс не фореграунде — подкидываете в фореграунд. Все. При таймауте проверок в 200мс — выйти из киоска уже невозможно. Причем можете кастомно разрешить процессы, хомескрин например чтоб пользователь мог видеть сколько время и вашей аппой пользоваться)
Ответ написан
recompileme
@recompileme
НЕЕЕТ!
Runnable appsChecker = new Runnable()
    {
         //@Override  
         public void run() {
        	 
        	 boolean inForeground = false; 
        	 List<RunningAppProcessInfo> appProcesses= null;
        	 appProcesses = activityManager.getRunningAppProcesses();
			 if (appProcesses!=null) {
				 
				 for (RunningAppProcessInfo appProcess : appProcesses) {
					 if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {//.IMPORTANCE_FOREGROUND) {
						// Log.d("timer vis",appProcess.processName+":"+appProcess.importance);
						 if (appProcess.processName.equals("com.bigbuzzy.business")) {
							 inForeground = true;
						 }
					 }
	             }
			 }
			 //Log.d("timer",inForeground+":"+ inWiFi);
			 if (!inForeground) {
				 /*
				 boolean isSystem = false;
				 for (RunningAppProcessInfo appProcess : appProcesses) {
					 if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
						PackageInfo p = null;
			            try {
							p = ForegroundService.this.getPackageManager().getPackageInfo(
									appProcess.pkgList[0], PackageManager.GET_PERMISSIONS);
						} 
			            catch (NameNotFoundException e) 
						{
						}
			            if (p != null) {
			            	String ss = "";
			            	if (p.requestedPermissions==null) ss = null;
			            	else {
			            	for (String s : p.requestedPermissions) {
			            		ss= ss + s;
			            	}
			            	}
			            	boolean issSystem = (p.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1;


			            	Log.d("System", appProcess.processName+":"+p.versionCode);
			            }
					 }
				 }
				 */
				 Intent i =new Intent();
		         i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		         i.setClassName("com.dgdfgdfgd.business", "com.dfgdfgdfgdfgdgdgf.business.MainMenuActivity");
		         startActivity(i);
		         i = null;
			 }
			 appProcesses= null;
             handler.postDelayed(appsChecker, INTERVAL);
              
        	 //}
         }
    };

Ответ написан
@bestime
Нашел возможность как это реализовать? тоже требуется.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы