EULA, Splash Screen, écran d’aide et permissions

Splash Screen permettant de gérer les permissions de l’application :

Au 1er lancement, demande de chaque permission, si l’utilisateur refuse au moins une permission, alors affichage de l’écran de paramétrage de l’application, sinon, lancement de l’application sans plus jamais demander de permission. A chaque changement de version (indiquée dans app.gradle, affichage de l’EULA ( End User License Agreement) expliquant les conditions d’utilisation de l’application et les modifications apportées par la nouvelle version.

I) EULA ( End User License Agreement) :

a) Création d’une classe java : « Eula.java » :

public class Eula {

    private String EULA_PREFIX = "eula_";
    private Activity mActivity;

    public Eula(Activity context) {
        mActivity = context;
    }

    public static String getAppNameFromPkgName(Context context, String Packagename) {
        try {
            PackageManager packageManager = context.getPackageManager();
            ApplicationInfo info = packageManager.getApplicationInfo(Packagename, PackageManager.GET_META_DATA);
            String appName = (String) packageManager.getApplicationLabel(info);
            return appName;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            return "";
        }
    }

    private PackageInfo getPackageInfo() {
        PackageInfo pi = null;
        try {
            pi = mActivity.getPackageManager().getPackageInfo(mActivity.getPackageName(), PackageManager.GET_ACTIVITIES);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return pi;
    }

    public void show() {
        PackageInfo versionInfo = getPackageInfo();

        // the eulaKey changes every time you increment the version number in the AndroidManifest.xml
        final String eulaKey = EULA_PREFIX + versionInfo.versionCode;
        final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mActivity);
        boolean hasBeenShown = prefs.getBoolean(eulaKey, false);
        if (hasBeenShown == false) {

            // Show the Eula
            String title = getAppNameFromPkgName(mActivity, mActivity.getPackageName()) + " " + versionInfo.versionName;

            //Includes the updates as well so users know what changed.
            String message = mActivity.getString(R.string.updates) + "\n\n" + mActivity.getString(R.string.eula);

            AlertDialog.Builder builder = new AlertDialog.Builder(mActivity)
                    .setTitle(title)
                    .setMessage(message)
                    .setPositiveButton(android.R.string.ok, new Dialog.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            // Mark this version as read.
                            SharedPreferences.Editor editor = prefs.edit();
                            editor.putBoolean(eulaKey, true);
                            editor.commit();
                            dialogInterface.dismiss();
                        }
                    })
                    .setNegativeButton(android.R.string.cancel, new Dialog.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // Close the activity as they have declined the EULA
                            mActivity.finish();
                        }

                    });
            builder.create().show();
        }
    }
}

Puis dans « res/values/strings.xml » insérez les balises avec le texte souhaité :

    "eula">Eula: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus sagittis, est in pulvinar varius, nulla metus suscipit enim, eu volutpat sem magna sed lacus. Donec tempor libero eget dui euismod eget luctus libero tempor. Quisque felis mauris, malesuada accumsan vulputate quis, sodales et nibh. Mauris tellus neque, interdum quis blandit sagittis, tincidunt at urna. Cras luctus feugiat metus, in sollicitudin felis laoreet sed. Mauris posuere mattis felis. Morbi enim odio, accumsan ac tincidunt pharetra, mattis sit amet turpis. Vivamus lobortis aliquet ante nec aliquet. Suspendisse potenti. Praesent rutrum condimentum ante et congue. In faucibus posuere arcu, ut congue sem dictum ac. Cras ante libero, pellentesque et fermentum ut, congue nec mi. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed euismod malesuada sapien ut eleifend. 
    "updates">Upates in this version: Donec sollicitudin sodales turpis eget congue. Nulla facilisi. Proin facilisis eros vel mauris mollis tempus. 

Enfin, insérez la ligne « new Eula(this).show(); » en début de l’activity de votre application, après le super.onCreate.

II) Splash Screen (écran d’attente / d’accueil)  avec gestion des permissions (pour Android > 6.0) :

a) Définir un style et un drawable xml pour le dessin de l’écran qui doit s’afficher lors de la demande de permission au démarrage de l’application :

res/values/styles.xml 



<style name="SplashTheme">
    <item name="android:windowBackground">@drawable/splash

 

res/drawable/splash.xml


<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:angle="90"
        android:endColor="#ff009f"
        android:startColor="#1a2b5d"
        android:type="linear" />


Créez la classe Splash.java :

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
import android.support.v4.app.ActivityCompat;
import android.widget.Toast;

import java.util.HashMap;
import java.util.Map;

import static android.Manifest.permission.READ_CONTACTS;
import static android.Manifest.permission.READ_SMS;

public class Splash extends Activity {
    private static final int PERMISSION_ALL = 0;
    private Handler h;
    private Runnable r;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        h = new Handler();
        r = new Runnable() {
            @Override
            public void run() {
                startActivity(new Intent(Splash.this, MainActivity.class));
                finish();}
        };

        String[] PERMISSIONS = {
                READ_CONTACTS,
                READ_SMS
        };

        if (!UtilPermissions.hasPermissions(this, PERMISSIONS)) {
            ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
        } else
            h.postDelayed(r, 1500);

    }

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {

        int index = 0;
        Map<String, Integer> PermissionsMap = new HashMap<String, Integer>();
        for (String permission : permissions) {
            PermissionsMap.put(permission, grantResults[index]);
            index++;
        }

        if ((PermissionsMap.get(READ_CONTACTS) != 0)
                || PermissionsMap.get(READ_SMS) != 0) {
            Toast.makeText(this, getResources().getString(R.string.lib_Perm_Auth)+" "+
                                              getResources().getString(R.string.app_name), Toast.LENGTH_LONG).show();
            String packageName = "com.andrologiciels.androtransms";
            try {
                //Open the specific App Info page:
                Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                Uri uri = Uri.fromParts("package", getPackageName(), null);
                intent.setData(uri);
                startActivity(intent);

            } catch ( ActivityNotFoundException e ) {
                //Open the generic Apps page:
                Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
                startActivity(intent);

            }
            finish();
        } else {
            h.postDelayed(r, 1500);
        }
    }
}

 

Dans le fichier AndroidManifest.xml, retirer l’intent-filter laundher de la classe MainActivity et insérez :

        <activity
            android:name=".Splash"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:theme="@style/SplashTheme">
            
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            
        

 

Ecran d’aide :

Créez une classe « Aide » :

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;

public class Aide extends FragmentActivity {

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

    public void dismiss(View v) {
        finish();
    }
}

Puis un layout activity_help.xml pour l’écran d’aide :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@color/opaque"
    tools:context=".Aide" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textColor="@android:color/white"
        android:text="@string/aide" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:onClick="dismiss"
        android:text="OK" />

</RelativeLayout>

Ajoutez dans colors.xml la couleur opaque :

<color name="opaque" >#cc000000</color>

Puis dans le manifest la déclaration de l’aide :

<activity
    android:name=".Aide"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>

Enfin, dans l’activité principale appelez l’aide :

bhelp.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(MainActivity.this, Aide.class);
        startActivity(intent);
    }
});

Référencehttps://www.appsrox.com/android/tutorials/showcase/3/

Références :

http://www.donnfelker.com/android-a-simple-eula-for-your-android-apps/

https://jayeshcp.wordpress.com/2013/07/23/showing-eula-in-android-app/

https://www.bignerdranch.com/blog/splash-screens-the-right-way/

Publicités
Articles récents
Commentaires récents
fatima sur Bienvenue !
AdminDroid sur Bienvenue !
fatima sur Bienvenue !
Archives
Catégories
%d blogueurs aiment cette page :