Bloccare applicazioni Android in modo programmato

Ho cercato di sviluppare una simile app, nel senso che voglio bloccare tutte le applicazioni nel mio dispositivo con una password che voglio. Ma non ho trovato nessun pezzo di codice per la soluzione. Così ho sviluppato uno da me e purtroppo non è riuscito. Ho trovato molte soluzioni per bloccare i dispositivi android, ma non ho trovato uno per bloccare un'app. Sarà lieto se suggeri una soluzione.

  • Perché Glass manca di Google Play Services?
  • Freeze l'orientamento dello schermo
  • Tabella di riferimento locale di Android JNI, stato corrente dump
  • Come leggere i contatti in Android utilizzando Realm?
  • Gestione degli events di contatto in SurfaceView su Maps API v2
  • come effettuare la chiamata httpPost con il corpo codificato json?
  • FragmentPagerAdapter esiste solo in Android.Support.V4.App (e non Android.App)
  • Invia una richiesta al servizio web each 5 secondi
  • Come impostare un allarme per scattare correttamente a tempo determinato?
  • Allinea le viste del figlio al centro dell'aspetto di ViewPager android
  • android si connette al localhost del PC quando il debugger sul dispositivo mobile
  • Android Studio su un hardware che non support la tecnologia di virtualizzazione
  • 2 Solutions collect form web for “Bloccare applicazioni Android in modo programmato”

    Ho utilizzato un servizio di background per verificare l'applicazione in primo piano, il che significa che l'applicazione viene utilizzata dall'utente. Poi controllo se ho bisogno di bloccare l'applicazione o no.

    Per trovare l'elenco di tutte le applicazioni installate, escludendo l'applicazione di 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.DisplayNameComparator(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); } 

    Per trovare l'attuale applicazione in primo piano:

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

    Qui il nome della class fornisce il nome del pacchetto dell'applicazione. Suggerisco di utilizzare il nome del pacchetto per identificare qualsiasi applicazione in modo da sapere che il nome del pacchetto è sempre univoco.

    Ora funzionalità per bloccare l'applicazione

    Quando troviamo quale applicazione è in esecuzione in primo piano e desideri bloccarla, dobbiamo solo avviare un'altra attività che ha un text EditText per la password e il button OK e Annulla.

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

    Facendo clic su OK se la password è corretta, quindi chiudi l'attività LockScreen. Se la password non è corretta, utilizza semplicemente il codice di codice riportto di seguito che chiude l'applicazione e mostra la schermata iniziale del dispositivo:

     Intent startHomescreen=new Intent(Intent.ACTION_MAIN); startHomescreen.addCategory(Intent.CATEGORY_HOME); startHomescreen.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(startHomescreen); 

    Lo stesso codice viene utilizzato anche sul button Annulla.

    Sembra che questo è ancora un mistero come suggerito dalle precedenti commenti. Quindi sto mettendo il codice che mi ha aiutato a risolvere questo 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; } 

    Chiama getForegroundApp() e restituirà una string che contiene il nome del currentForegroundApp compreso il nome del pacchetto, ad esempio com.example.app

    Ora, per utilizzare questo codice, abbiamo bisogno di questa linea di codice nel file Manifest

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

    e portre l'utente a Usage Data access Settings ai Usage Data access Settings :

    usageAccessSettingsPage

      public void usageAccessSettingsPage(){ Intent intent = new Intent(); intent.setAction(Settings.ACTION_USAGE_ACCESS_SETTINGS); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Uri uri = Uri.fromParts("package", mContext.getPackageName(), null); intent.setData(uri); startActivity(intent); } 

    o manualmente individuando in LockScreen and Security > Other security settings > Usage access data .

    Ora arriva la parte per bloccare l'applicazione, questa parte è coperta dalla risposta di Amit molto bene. Tuttavia, se qualcuno sta cercando un modo per limitare l'utente all'utilizzo di un'applicazione, un trucco è quello di aprire la schermata iniziale quando viene avviata un'app. Particolare.

    Questo può essere fatto chiamando il seguente metodo quando l' currentApp è uguale a un'applicazione bloccata

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

    ShowHomeScreen

      public boolean showHomeScreen(){ Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(startMain); return true; } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.