En Android 6, ¿cómo denegar el permiso de una aplicación para acceder a la red?

30

En Android 6, el usuario tiene (¡finalmente!) La posibilidad de aprobar o denegar permisos específicos para una aplicación.

Sin embargo, no pude encontrar una manera de aprobar o denegar el acceso a la red, ya sea a través de Wi-Fi o mediante conexión de datos móviles. El permiso correspondiente aparece en "Otras capacidades de la aplicación" y es solo informativo, aparentemente no hay forma de cambiarlo.

Aquí hay un ejemplo con la aplicación Chess Free:

captura de pantalla

dr01
fuente
44
No puedes Permítame encontrar una fuente creíble, pero no puede hacerlo de forma nativa, ya que dañaría mucho los intereses de Google (es decir, anuncios). Editar: Encontrará este artículo interesante: androidpolice.com/2015/06/06/…
Firelord

Respuestas:

27

No podrá lograr el éxito a través del mecanismo nativo de Android.

Cody Toombs de Android Police lo ha señalado muy bien en el artículo: Android M nunca pedirá permiso a los usuarios para usar Internet, y eso probablemente sea correcto .

En la sección Permisos normales y peligrosos del documento Descripción general de permisos , Google ha señalado:

Los permisos se dividen en varios niveles de protección.

Hay dos niveles de protección que afectan las aplicaciones de terceros: permisos normales y peligrosos.

  • Los permisos normales cubren áreas donde su aplicación necesita acceder a datos o recursos fuera del entorno limitado de la aplicación, pero donde hay muy poco riesgo para la privacidad del usuario o el funcionamiento de otras aplicaciones . Por ejemplo, el permiso para establecer la zona horaria es un permiso normal.

    Si una aplicación declara en su manifiesto que necesita un permiso normal, el sistema otorga automáticamente ese permiso a la aplicación en el momento de la instalación. El sistema no solicita al usuario que otorgue permisos normales, y los usuarios no pueden revocar estos permisos.

  • Los permisos peligrosos cubren áreas donde la aplicación quiere datos o recursos que involucren la información privada del usuario, o que puedan afectar los datos almacenados del usuario o el funcionamiento de otras aplicaciones. Por ejemplo, la capacidad de leer los contactos del usuario es un permiso peligroso. Si una aplicación declara que necesita un permiso peligroso, el usuario debe otorgar explícitamente el permiso a la aplicación.

(El énfasis es mío)

Sorprendente o no, los siguientes permisos se incluyen en la lista de permisos normales :

  • CHANGE_NETWORK_STATE : permite que las aplicaciones cambien el estado de conectividad de la red, es decir, datos móviles;
  • CHANGE_WIFI_STATE : permite que las aplicaciones cambien el estado de conectividad Wi-Fi;
  • INTERNET : permite que las aplicaciones abran conexiones de red.

Si eso no es suficiente, revise los permisos administrados por AppOps aquí . Si no encuentra su permiso allí, no podrá hacer nada con él en la GUI.

Dado que los métodos alternativos ya están ampliamente cubiertos en este sitio, consulte:

Señor del fuego
fuente
12
Gracias por tu respuesta. Es decepcionante cuando las características están paralizadas, no por imposibilidades técnicas, sino por razones del mercado.
dr01
25

Puede usar NetGuard (consulte mi lista de Firewalls de Internet para otras alternativas), que funciona sin root y le permite bloquear el acceso a Internet para aplicaciones de forma selectiva (WiFi o datos móviles, e incluso siempre o solo si la pantalla está apagada). Es del desarrollador de XPrivacy, por lo que tiene que ser bueno;)

Netguard Netguard Netguard
NetGuard (fuente: Google Play ; haga clic en las imágenes para ver las variantes más grandes)

NetGuard es de código abierto, por lo que también puede encontrarlo en F-Droid .

Actualización: tenga en cuenta que las versiones recientes de Netguard incluyen Google Ads y Firebase Analytics, dos cosas que, en mi humilde opinión, no tienen nada que hacer en una aplicación de firewall (o cualquier otra seguridad), lo que probablemente sea la razón por la que ya no se actualiza en F-Droid repositorio oficial (todavía disponible en el mío con las advertencias apropiadas).

Izzy
fuente
1
La variante F-Droid de NetGuard en realidad ha agregado una funcionalidad más allá de la permitida en Play Store.
andDevW
¿Puede bloquear anuncios en la aplicación?
Inmortal Player
1
@ImmortalPlayer si a una aplicación se le niega el acceso a la red, tampoco puede cargar anuncios. Entonces la respuesta a eso sería "sí".
Izzy
3

No se puede negar el acceso a Internet para aplicaciones individuales en Android de forma nativa. Los anuncios son las principales fuentes de ingresos de Google.

Sin embargo, si está utilizando Opera Max, puede restringir el acceso a Internet a aplicaciones individuales. Incluso puede guardar datos, gracias a la tecnología de compresión de Opera.

Instala Opera Max desde Play Store. Es completamente gratis y fácil de usar. No se requiere root.

NVZ
fuente
Actualización : ya no soy fanático de Opera Max después de que comenzaron a publicar demasiados anuncios.
NVZ
3

A la luz de algunos eventos recientes , me gustaría mejorar esta pregunta presentando Triangle de Google. Consíguelo en APKMirror o APKPure e instálalo con ADB .

Estas son algunas de las características clave.

Datos móviles utilizados Solicitar permitir datos para aplicaciones bloqueadas Apague cuando esté en Wi-Fi Bloquear todo por defecto

No es una VPN, bloquea localmente el acceso de sus aplicaciones a Internet. Piense en ello como un nuevo permiso, como usar la cámara o tener acceso a su ubicación.

NatoBoram
fuente
1
¿Utiliza esto una VPN / proxy como aplicaciones similares? ¿Bloquea el acceso de las bibliotecas nativas?
Hackel
1
@hackel lo instalé (tuve que descargarlo porque decía que no estaba disponible en mi país). Me pidió que habilitara una VPN. Tampoco parece bloquear WIFI.
Bort
3

Preámbulo

Puede que sea tarde, pero deseo agregar mi propia opinión sobre su pregunta, por completo. Esta respuesta es una forma segura de bloquear el acceso a Internet a una aplicación. Los inconvenientes? No bloquea Intents, es complicado y puede hacer que la aplicación de destino se bloquee, y requiere privilegios de root .

Ha sido probado y confirmado para funcionar con Android 7.1.2.


Razón fundamental

Según lo mencionado por los otros respondedores, cualquier aplicación que desee acceder a Internet, debe declarar el android.permission.INTERNETpermiso innegable dentro de su AndroidManifest.xml. Sin embargo, ¿cómo recuerda Android qué permisos solicitó una aplicación? Al guardarlos dentro packages.xml, un archivo protegido ubicado en /data/system.

No hace falta decir que alguien como nosotros podría estar interesado en editar dicho archivo, con el propósito de agregar o eliminar un permiso, siempre que tenga privilegios de root. Esta es nuestra forma de negar el acceso a Internet a una aplicación sin VPN o software de firewall.


El packages.xmlarchivo

El packages.xmlarchivo enumera todas las aplicaciones instaladas, junto con sus rutas y permisos. Cada aplicación se coloca entre las <package></package>etiquetas; por el bien de mi respuesta, apuntaré a Nova Launcher por TeslaCoil. La sección de la aplicación en el archivo es la siguiente:

    <package name="com.teslacoilsw.launcher" codePath="/data/app/com.teslacoilsw.launcher-1" nativeLibraryPath="/data/app/com.teslacoilsw.launcher-1/lib" publicFlags="944258628" privateFlags="0" ft="16075caace8" it="16075cac965" ut="16075cac965" version="53000" userId="10083" installer="com.android.packageinstaller">
        <sigs count="1">
            <cert index="7" key="3082034d30820235a0030201020204638fbad3300d06092a864886f70d01010b05003057315530530603550403134c726f636b7a35353535204f553d44726f69642046726565646f6d20556e6974204f3d44726f69642046726565646f6d20496e63204c3d556e6b6e6f776e20533d556e6b6e6f776e20433d4c4b301e170d3134313230353030343535375a170d3434313132373030343535375a3057315530530603550403134c726f636b7a35353535204f553d44726f69642046726565646f6d20556e6974204f3d44726f69642046726565646f6d20496e63204c3d556e6b6e6f776e20533d556e6b6e6f776e20433d4c4b30820122300d06092a864886f70d01010105000382010f003082010a0282010100818b312365be3e55f48989d43468880067464eca65aa3ba73305178311fc2a053c143182f6d2ea635b57dc327adf8a5a9b763c03f0a48c38530114e6979358d6bfca37d161ca6fe8bb0d80f061d7b67bc1456cdfc38e0cda2ebd05c48113f701140950f0fe4315de6b95c7504129abb2c1a61f1e4f1229fb83f474dbcd7dc957b84a1b8a2aa0157b223609d77980a3f579c93fbb24a6f9fbb5a8e207cccdf1add616c95c732d5c114c0168fdbd9c00ddf211c2b8886b9498a34f389025802e334f404b7e4eb75f6308f086e5bdac64db10053c7ff8d21a350b941d5394ffbe2bd037139134eb065c2317625e65d3f628aecf7965a0d70b02e68aa8371efd1fe50203010001a321301f301d0603551d0e04160414a4e66b693ecdf3241883e3eed668354e1531ba11300d06092a864886f70d01010b050003820101003992f3f461a290db767911a4a519f035fe0c34e597e2fba2e31371e260bd2fc8f9a93c35e6f06553d02588d2f8453ee784d2ba09a696e66304e3e01f7c6bdf5b2747fc73f79d00379cc94eefa542c8eb308318364df2fa1a9c6a7ef0669d08f7b1f8635d0d4331e2817d5aeb0854760116c29801cf915ef67d5c0e04861cad4fa7b96fe8f9a0baf0cda649cd35a7122142ba38b2d16d9d319a8604a41fe0025d89be87f84ce8fc080ab54c76a96f3d9b70b1a5f5e18e48768e3684bca8a950665e16a6d50cf0045949baebca876d55eeba52ea421f33009872d9d654f8f8caa1bb465d754694d4bf6cb92f3299fbec3781849b37e6ba23ffe3d6c20ecb9bc65d" />
        </sigs>
        <perms>
            <item name="com.android.launcher3.permission.READ_SETTINGS" granted="true" flags="0" />
            <item name="com.google.android.c2dm.permission.RECEIVE" granted="true" flags="0" />
            <item name="com.teslacoilsw.launcher.permission.C2D_MESSAGE" granted="true" flags="0" />
            <item name="android.permission.EXPAND_STATUS_BAR" granted="true" flags="0" />
            <item name="android.permission.WRITE_MEDIA_STORAGE" granted="true" flags="0" />
            <item name="android.permission.INTERNET" granted="true" flags="0" />
            <item name="android.permission.ACCESS_NETWORK_STATE" granted="true" flags="0" />
            <item name="android.permission.SET_WALLPAPER" granted="true" flags="0" />
            <item name="android.permission.SET_WALLPAPER_HINTS" granted="true" flags="0" />
            <item name="android.permission.VIBRATE" granted="true" flags="0" />
            <item name="android.permission.ACCESS_WIFI_STATE" granted="true" flags="0" />
            <item name="android.permission.WAKE_LOCK" granted="true" flags="0" />
        </perms>
        <proper-signing-keyset identifier="10" />
    </package>

La sangría se informa textualmente del archivo.


Procedimiento

Armados con el conocimiento anterior, ahora podemos proceder a examinar los permisos de Nova Launcher, envueltos entre ellos <perms></perms>. Muy pronto, encontraremos el único que necesitamos editar:

            <item name="android.permission.INTERNET" granted="true" flags="0" />

Para denegar efectivamente el acceso a Internet a la aplicación, simplemente necesitamos eliminar toda la línea y reiniciar nuestro dispositivo. Es inútil comentarlo para uso futuro: Android examina este archivo en cada arranque y purgará sus comentarios .


Inconvenientes

Si sigue este procedimiento, obtendrá una aplicación que no puede comunicarse con Internet de ninguna manera. Sin embargo, las aplicaciones y el software mal codificados destinados a Marshmallow y superiores pueden bloquearse al intentar conectarse a Internet , como lo hace Nova.

Además, como señaló Firelord, la actualización de una aplicación hace que los cambios se reviertan, anulando nuestros esfuerzos y requiriendo que se elimine nuevamente el permiso.


Modificando este procedimiento

Para revertir lo que hicimos anteriormente, todo lo que se necesita es agregar el permiso que eliminamos entre los demás y reiniciar el dispositivo.


Renuncia

De ninguna manera estoy afiliado a Nova Launcher o sus desarrolladores.

Vendedor de máscara de muerte
fuente