Aplicaciones de Android Lock

Soy nuevo aquí y he buscado preguntas para ayudarme, pero no tengo respuestas claras.

Necesito hacer una aplicación para bloquear otras aplicaciones en el teléfono. He visto varios en el mercado, pero quiero hacer uno. ¿Hay alguna manera de saber cuándo un usuario intenta abrir una aplicación y presentar una actividad? (Para poner la contraseña).

He intentado con FileObserver, pero sólo funciona con archivos y directorios (obviamente). ¿Podría hacer un oyente que captura la Intención de las otras aplicaciones antes de comenzar?

Me disculpo por mi inglés y agradezco su ayuda!

No, no puedes saber cuándo se inicia otra aplicación sin algún tipo de hack. Esto se debe a que los lanzamientos de aplicaciones no se emiten.

Lo que puede hacer es crear un servicio que se ejecuta en intervalos fijos, digamos 1000 milisegundos, que comprueba lo que no es la aplicación del sistema en la parte delantera. Mata esa aplicación y desde el servicio pop una caja de entrada de contraseña. Si esa contraseña es correcta, vuelva a iniciar la aplicación

Aquí hay algunos ejemplos de código

timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { public void run() { List<RunningAppProcessInfo> appProcesses= activityManager.getRunningAppProcesses(); for (RunningAppProcessInfo appProcess : appProcesses) { try { if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { if (!lastFrontAppPkg.equals((String) appProcess.pkgList[0])) { apkInfo = ApkInfo.getInfoFromPackageName(appProcess.pkgList[0], mContext); if (apkInfo == null || (apkInfo.getP().applicationInfo.flags && ApplicationInfo.FLAG_SYSTEM) == 1) { // System app continue; } else if (((apkInfo.getP().versionName == null)) || (apkInfo.getP().requestedPermissions == null)) { //Application that comes preloaded with the device continue; } else { lastFrontAppPkg = (String) appProcess.pkgList[0]; } //kill the app //Here do the pupop with password to launch the lastFrontAppPkg if the pass is correct } } } } catch (Exception e) { //e.printStackTrace(); } } } }, 0, 1000); 

Y aquí está el ApkInfo.getInfoFromPackageName()

  /** * Get the ApkInfo class of the packageName requested * * @param pkgName * packageName * @return ApkInfo class of the apk requested or null if package name * doesn't exist * @see ApkInfo */ public static ApkInfo getInfoFromPackageName(String pkgName, Context mContext) { ApkInfo newInfo = new ApkInfo(); try { PackageInfo p = mContext.getPackageManager().getPackageInfo( pkgName, PackageManager.GET_PERMISSIONS); newInfo.appname = p.applicationInfo.loadLabel( mContext.getPackageManager()).toString(); newInfo.pname = p.packageName; newInfo.versionName = p.versionName; newInfo.versionCode = p.versionCode; newInfo.icon = p.applicationInfo.loadIcon(mContext .getPackageManager()); newInfo.setP(p); } catch (NameNotFoundException e) { e.printStackTrace(); return null; } return newInfo; } 

Hay una manera de hacerlo. Puede saber cuándo se inicia una aplicación. Puede utilizar la clase packagemanager para obtener toda la información sobre cualquier aplicación instalada e inbuld. Y utilizar el código a continuación para saber whwn que la aplicación se inicia

  @Override public void run() { Log.i("test","detector run"); try { Process process; process = Runtime.getRuntime().exec(ClearLogCatCommand); process = Runtime.getRuntime().exec(LogCatCommand); br = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; // Check if it matches the pattern while(((line=br.readLine()) != null) && !this.isInterrupted()){ Log.d("Detector", "RUN"+line); // Ignore launchers if (line.contains("cat=[" + Intent.CATEGORY_HOME + "]")) continue; Matcher m = ActivityNamePattern.matcher(line); if (!m.find()) continue; if (m.groupCount()<2){ // Log.d("Detector", "Unknown problem while matching logcat output. Might be SDK version?"); continue; } if (mListener!=null) mListener.onActivityStarting(m.group(1), m.group(2)); Log.i("Detector", "Found activity launching: " + m.group(1) + " / " + m.group(2)); } } catch (IOException e) { e.printStackTrace(); } } 

Ahora puede utilizar AccessibilityService que le permite averiguar qué actividad se encuentra en la parte superior.

En la clase AccessibilityService:

 @Override public void onAccessibilityEvent(AccessibilityEvent event) { if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { ComponentName componentName = new ComponentName( event.getPackageName().toString(), event.getClassName().toString() ); ActivityInfo activityInfo = tryGetActivity(componentName); boolean isActivity = activityInfo != null; if (isActivity) { Log.i("CurrentActivity", componentName.flattenToShortString()); } } } 

Tendrás que activar la Accesibilidad en la configuración de tu teléfono, lo que se puede hacer accediendo a Ajustes> Accesibilidad> Servicios> Tu aplicación. También hay un par de permisos que tendrás que agregar en tu Manifiesto. Una gran cantidad de la información se puede encontrar en el sitio de desarrolladores de Android: http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html

¡Espero que esto ayude!

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.