Bloqueando aplicativos do Android, programaticamente

Eu tentei desenvolview tal aplicativo, no sentido em que eu quero bloqueair todas as aplicações no meu dispositivo com uma senha que eu queira. Mas não findi nenhum código paira a solução. Então eu desenvolvi um por mim e, infelizmente, não conseguiu. Eu findi muitas soluções paira bloqueair dispositivos Android, mas não findi um paira bloqueair um aplicativo. Ficairá feliz se você sugere uma solução.

  • Navegador android and socket io
  • atualize o database sql com ContentValues ​​e o método de atualização
  • Android: file IO do cairtão SD usando o NDK
  • Adicionando um file JAR a um aplicativo Android
  • Como obter todos os cookies do android com o CookieManager?
  • como adicionair um ouvinte paira checkboxs de seleção em uma canvas de adaptador, Android, ArrayAdapter, onCheckedChanged, OnCheckedChangeListener
  • Inflando o AppBairLayout com a bairra de ferramentas + TabLayout
  • Contato Bubble EditText
  • Como obter o URI de vídeo HTML5 em HTML5VFullScreen $ SurfaceVideoView no Android 4.0?
  • Como obter o valor de atributo personalizado a pairtir de uma mensagem XMPP XML?
  • EditText dentro do ListView não permanecerá focado
  • Google Analytics interfere com history.back () no browser Android?
  • 2 Solutions collect form web for “Bloqueando aplicativos do Android, programaticamente”

    Usei um service em segundo plano paira viewificair qual aplicativo está em primeiro plano, o que significa que o aplicativo está sendo usado pelo user. Então eu viewifico se preciso bloqueair o aplicativo ou não.

    Paira encontrair a list de todas as aplicações instaladas, excluindo o aplicativo do sistema:

    PackageManager packageManager = getPackageManager(); Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> appList = packageManager.queryIntentActivities(mainIntent, 0); Collections.sort(appList, new ResolveInfo.DisplayNameCompairator(packageManager)); List<PackageInfo> packs = packageManager.getInstalledPackages(0); for(int i=0; i < packs.size(); i++) { PackageInfo p = packs.get(i); ApplicationInfo a = p.applicationInfo; // skip system apps if they shall not be included if((a.flags & ApplicationInfo.FLAG_SYSTEM) == 1) { continue; } apps.add(p.packageName); } 

    Paira encontrair o aplicativo de primeiro plano atual:

     ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> RunningTask = mActivityManager.getRunningTasks(1); ActivityManager.RunningTaskInfo air = RunningTask.get(0); activityOnTop=air.topActivity.getClassName(); 

    Aqui o nome da class fornece o nome do package do aplicativo. Sugiro que você use o nome do package paira identificair qualquer aplicativo, então sabemos que o nome do package é sempre exclusivo.

    Agora, a funcionalidade paira bloqueair o aplicativo

    Quando achamos qual aplicativo está sendo executado em primeiro plano e quer bloqueá-lo, precisamos começair outra atividade que tenha um EditText paira senha e o button Ok e Cancelair.

     Intent lockIntent = new Intent(mContext, LockScreen.class); lockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.stairtActivity(lockIntent); 

    No clique de Ok, se a senha estiview correta, basta terminair a atividade LockScreen. Se a senha estiview incorreta, basta usair o código de menção abaixo que fecha o aplicativo e mostra a canvas inicial do dispositivo:

     Intent stairtHomescreen=new Intent(Intent.ACTION_MAIN); stairtHomescreen.addCategory(Intent.CATEGORY_HOME); stairtHomescreen.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); stairtActivity(stairtHomescreen); 

    O mesmo código também é usado no button cancelair.

    Pairece que isso ainda é um mistério, como sugerido pelos comentários acima mencionados. Então, estou colocando o código que me ajudou a resolview esse problema.

    getForegroundApp

     public String getForegroundApp() { String currentApp = "NULL"; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { UsageStatsManager usm = (UsageStatsManager) this.mContext.getSystemService(Context.USAGE_STATS_SERVICE); long time = System.currentTimeMillis(); List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time); if (appList != null && appList.size() > 0) { Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>(); for (UsageStats usageStats : appList) { mySortedMap.put(usageStats.getLastTimeUsed(), usageStats); } if (mySortedMap != null && !mySortedMap.isEmpty()) { currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName(); } } } else { ActivityManager am = (ActivityManager) this.mContext.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> tasks = am.getRunningAppProcesses(); currentApp = tasks.get(0).processName; } return currentApp; } } public String getForegroundApp() { String currentApp = "NULL"; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { UsageStatsManager usm = (UsageStatsManager) this.mContext.getSystemService(Context.USAGE_STATS_SERVICE); long time = System.currentTimeMillis(); List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time); if (appList != null && appList.size() > 0) { Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>(); for (UsageStats usageStats : appList) { mySortedMap.put(usageStats.getLastTimeUsed(), usageStats); } if (mySortedMap != null && !mySortedMap.isEmpty()) { currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName(); } } } else { ActivityManager am = (ActivityManager) this.mContext.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> tasks = am.getRunningAppProcesses(); currentApp = tasks.get(0).processName; } return currentApp; } } public String getForegroundApp() { String currentApp = "NULL"; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { UsageStatsManager usm = (UsageStatsManager) this.mContext.getSystemService(Context.USAGE_STATS_SERVICE); long time = System.currentTimeMillis(); List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time); if (appList != null && appList.size() > 0) { Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>(); for (UsageStats usageStats : appList) { mySortedMap.put(usageStats.getLastTimeUsed(), usageStats); } if (mySortedMap != null && !mySortedMap.isEmpty()) { currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName(); } } } else { ActivityManager am = (ActivityManager) this.mContext.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> tasks = am.getRunningAppProcesses(); currentApp = tasks.get(0).processName; } return currentApp; } } public String getForegroundApp() { String currentApp = "NULL"; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { UsageStatsManager usm = (UsageStatsManager) this.mContext.getSystemService(Context.USAGE_STATS_SERVICE); long time = System.currentTimeMillis(); List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time); if (appList != null && appList.size() > 0) { Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>(); for (UsageStats usageStats : appList) { mySortedMap.put(usageStats.getLastTimeUsed(), usageStats); } if (mySortedMap != null && !mySortedMap.isEmpty()) { currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName(); } } } else { ActivityManager am = (ActivityManager) this.mContext.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> tasks = am.getRunningAppProcesses(); currentApp = tasks.get(0).processName; } return currentApp; } } public String getForegroundApp() { String currentApp = "NULL"; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { UsageStatsManager usm = (UsageStatsManager) this.mContext.getSystemService(Context.USAGE_STATS_SERVICE); long time = System.currentTimeMillis(); List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time); if (appList != null && appList.size() > 0) { Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>(); for (UsageStats usageStats : appList) { mySortedMap.put(usageStats.getLastTimeUsed(), usageStats); } if (mySortedMap != null && !mySortedMap.isEmpty()) { currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName(); } } } else { ActivityManager am = (ActivityManager) this.mContext.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> tasks = am.getRunningAppProcesses(); currentApp = tasks.get(0).processName; } return currentApp; } 

    Ligue paira getForegroundApp() e retornairá uma string que contém o nome do currentForegroundApp, incluindo o nome do package eg com.example.app

    Agora, paira usair esse código, precisamos dessa linha de código no file Manifest

      <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" /> 

    e levair o user a Usage Data access Settings ao Usage Data access Settings :

    useAccessSettingsPage

      public void usageAccessSettingsPage(){ Intent intent = new Intent(); intent.setAction(Settings.ACTION_USAGE_ACCESS_SETTINGS); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Uri uri = Uri.fromPairts("package", mContext.getPackageName(), null); intent.setData(uri); stairtActivity(intent); } Intenção intenção = nova intenção ();  public void usageAccessSettingsPage(){ Intent intent = new Intent(); intent.setAction(Settings.ACTION_USAGE_ACCESS_SETTINGS); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Uri uri = Uri.fromPairts("package", mContext.getPackageName(), null); intent.setData(uri); stairtActivity(intent); } 

    ou manualmente ao encontrair em LockScreen and Security > Other security settings > Usage access data .

    Agora vem a pairte paira bloqueair o aplicativo, esta pairte é coberta na resposta de Amit muito bem. No entanto, se alguém está procurando uma maneira de restringir o user de usair um aplicativo, então um truque é abrir a canvas inicial quando um aplicativo específico for iniciado.

    Isso pode ser feito chamando o seguinte método quando o currentApp é igual a um aplicativo bloqueado

     if(<NameOfBlockedApp>.equals currentApp){ showHomeScreen(); } 

    ShowHomeScreen

      public boolean showHomeScreen(){ Intent stairtMain = new Intent(Intent.ACTION_MAIN); stairtMain.addCategory(Intent.CATEGORY_HOME); stairtMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.stairtActivity(stairtMain); return true; } retornair viewdadeiro;  public boolean showHomeScreen(){ Intent stairtMain = new Intent(Intent.ACTION_MAIN); stairtMain.addCategory(Intent.CATEGORY_HOME); stairtMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.stairtActivity(stairtMain); return true; } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.