Bienvenidos sean a este post, hoy veremos otro tipo de permisos en este caso los definidos por nosotros para restringir o permitir acceso a nuestro software, para poder utilizarlo se hace por medio de la etiqueta permission en el archivo AndroidManifest.xml, veamos un ejemplo de etiqueta:

Anuncios
<permission
	android:name="com.payperview.servicios.VER_VIDEOS"
	android:description="@string/descripcion"
	android:label="@string/etiqueta"
	android:permissionGroup="android.permission-group.COST_MONEY"
	android:protectionLevel="dangerous" />

En este caso definiremos en las tres lineas, el nombre del permiso, el tipo de descripcion y la etiqueta, observen como la descripcion y la etiqueta las sacamos del archivo strings.xml, despues vienen las lineas que mas interesan, la de permissionGroup (opcional) nos permite incluirla dentro de un grupo que representen algo para el usuario, en este caso un gasto economico, y la linea de protectionLevel informa al sistema de como debe notificar este tipo de permiso al usuario, veamos algunos de los posibles valores:

  • normal, no se le notifica al usuario de este tipo de permiso cuando se instala la aplicacion
  • dangerous, se le advierte al usuario en el proceso de instalacion
  • signature, solo se concede el permiso a la aplicacion siempre que la firma digital sea igual que la aplicacion que declara el permiso
  • asignatureSystem, idem al anterior pero puede ser usada por el sistema

Para entender el concepto de permisos vamos a hacer un par de ejemplos, el proyecto va a tratar sobre un servicio de Payperview, donde permitiremos que los desarrolladores puedan reproducir nuestros videos desde sus aplicaciones pero este servicio no es gratuito y debe notificarles a los usuarios de que la utilizacion de esta aplicacion va a tener un costo. Para ello vamos a crear nuestra aplicacion de “servidor” con las siguientes caracteristicas:

  • Application Name: Nuevo Permiso
  • Domain company: payperview.com
  • Package Name: com.payperview.servicios
  • API (Phone and Tablet): 14
  • Add an Activity: Empty Activity

Para cambiar el nombre del paquete deben apretar el boton edit al lado del mismo para poder cambiarlo

Una vez clickeado les dara la opcion de poder editar el nombre, modifiquenlo por com.payperview.servicios y pulsen el boton Done

Despues pulsen Next y sigan como siempre, una vez creada nuestra app vamos a hacer las siguientes modificaciones, primero modifiquemos el archivo strings.xml agregando las siguientes lineas:

    <string name="etiqueta">
        reproduccion de videos bajo demanda
    </string>
    <string name="descripcion">
        Permite a la aplicacion reproducir videos de PayPerView sin tu intervencion. Se trata de un servicio pago por lo que puede afectar el saldo de tu cuenta. Si no tienes cuenta los videos no podran ser reproducidos
    </string>
Anuncios

Nuestra siguiente modificacion sera en el archivo AndroidManifest.xml donde agregaremos la etiqueta de permission antes descripta:

<permission
	android:name="com.payperview.servicios.VER_VIDEOS"
	android:description="@string/descripcion"
	android:label="@string/etiqueta"
	android:permissionGroup="android.permission-group.COST_MONEY"
	android:protectionLevel="dangerous" />

Luego agregaremos el siguiente bloque en la etiqueta application:

        <activity android:name="VerVideos"
            android:permission="com.payperview.servicios.VER_VIDEOS">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
            </intent-filter>
        </activity>

Luego copiaremos nuestra clase MainActivity por una nueva llamada VerVideos, pueden hacer click con el boton derecho y seleccionar Copy luego hacen Ctrl+V o click con el boton derecho y Paste sobre el contenedor de nuestras clases Java, una vez efectuado les aparecera el siguiente cuadro

En New name lo modifican a VerVideos, pulsen Ok para crear nuestra nueva clase. Esta sera una copia exacta de nuestro clase original, a la cual agregaremos en el metodo onCreate() la siguiente linea:

Toast.makeText(this,"Reproduciendo Video",Toast.LENGTH_SHORT).show();

Esta linea emulara la reproduccion de nuestro video, esta se vera unicamente si tenemos los permisos. La clase MainActivity esta simplemente para tener una actividad de inicio, si todo fue correctamente hecho debemos ejecutar esta app para poder registrar las clases en nuestro dispositivo, si todo salio de forma exitosa solamente nos resta crear una aplicacion “cliente” para conectarse para ver los videos, pero antes veamos como quedaron nuestros codigos finales, el primer codigo es del AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.payperview.servicios">
    <permission
        android:name="com.payperview.servicios.VER_VIDEOS"
        android:description="@string/descripcion"
        android:label="@string/etiqueta"
        android:permissionGroup="android.permission-group.COST_MONEY"
        android:protectionLevel="dangerous" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action
                    android:name="android.intent.action.MAIN" />

                <category
                    android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="VerVideos"
            android:permission="com.payperview.servicios.VER_VIDEOS">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
            </intent-filter>
        </activity>
    </application>
</manifest>
Anuncios

Nuestro siguiente codigo es el archivos strings.xml:

<resources>
    <string name="app_name">Nuevo Permiso</string>
    <string name="etiqueta">
        reproduccion de videos bajo demanda
    </string>
    <string name="descripcion">
        Permite a la aplicacion reproducir videos de PayPerView sin tu intervencion. Se trata de un servicio pago por lo que puede afectar el saldo de tu cuenta. Si no tienes cuenta los videos no podran ser reproducidos
    </string>
</resources>

Nuestro siguiente codigo es el de la clase VerVideos:

package com.payperview.servicios;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

public class VerVideos extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toast.makeText(this,"Reproduciendo Video",
                Toast.LENGTH_SHORT).show();
    }
}

La clase MainActivity y el archivo activity_main.xml se mantienen igual a como se crearon automaticamente y con todos nuestros codigos vistos procedamos a cerrar nuestro proyecto y creamos uno nuevo de la siguiente forma:

  • Application Name: Usar Permiso
  • Domain Name: example.org
  • API (Phone and Tablet): 14
  • Add an Activity: Empty Activity

Con nuestra app creada procedamos a modificar el codigo de nuestro archivo activity_main.xml con el siguiente codigo:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Ver Video"
        android:onClick="verVideo" />
</LinearLayout>

Pasemos a agregar el metodo faltante en nuestra clase MainActivity:

    public void verVideo(View view){
        Intent i = new Intent();
        i.setClassName("com.payperview.servicios",
                "com.payperview.servicios.VerVideo");
        startActivity(i);
        
    }
Anuncios

Si lo prueban ahora les devolvera un error, para evitar este error debemos agregar la siguiente linea en el archivo AndroidManifest.xml:

<uses-permission android:name="com.payperview.servicios.VER_VIDEOS"/>

Antes de probar nuestra app veamos los codigos finales, primero del archivo AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.example.usarpermiso">
    <uses-permission
        android:name="com.payperview.servicios.VER_VIDEOS" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action
                    android:name="android.intent.action.MAIN" />

                <category
                    android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

Nuestro siguiente codigo sera el de la clase MainActivity:

package org.example.usarpermiso;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void verVideo(View view){
        Intent i = new Intent();
        i.setClassName("com.payperview.servicios",
                "com.payperview.servicios.VerVideos");
        startActivity(i);

    }
}

Con todo comprobado que esta exactamente igual podemos pasar a probar nuestra app como se ve en el siguiente video

En el video vemos como funciono perfectamente pero ahora veremos como funciona en un equipo con Android 6.0

Como pueden ver en el caso de Android 6.0 o superior debemos configurar los permisos de nuestra app, como se ve en el video los permisos son los que creamos nosotros pero debemos habilitarlos, se puede hacer una solicitud de permisos como vimos en el post anterior pero eso podemos dejarlo para un proximo post.

Anuncios

En resumen, hoy hemos visto permisos especiales definidos por el programador, estos no solamente estan definidos por nosotros sino que tienen algunas categorias, estos permiten establecer mejores restricciones a las ya disponibles en Android, espero les haya sido util sigueme en Twitter, Facebook o Google+ para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00