Forums Développement Multimédia

Aller au contenu

Ouvrir le dossier Download

air android apk

23 réponses à ce sujet

#1 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 485 messages

Posté 04 October 2019 - 06:12 AM

Bonjour,

Dans une application Air 23.0 pour Android je souhaiterais créer un bouton pour ouvrir le dossier Download si c'est faisable, il est posible dans cette application d'effectuer une mise à jour et de télécharger une nouvelle version de l'appli, une fois télécharger je souhaiterais accéder rapidement au dossier Download contenant le nouveau Apk.

Merci d'avance.

#2 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1797 messages

Posté 07 October 2019 - 08:26 AM

Pour accéder au dossier Download :

var file:File = File.userDirectory.resolvePath("Download");

le chemin du fichier :

Citation

/storage/emulated/0/Download

le problème est que tu verras un dossier vide, depuis Android 6.0 (API level 23) il faut une permission ("android.permission.WRITE_EXTERNAL_STORAGE") pour y accéder, j'ai créer une ANE pour ça

#3 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 485 messages

Posté 07 October 2019 - 20:33 PM

Bonsoir pol2095,

Voici mon script de départ, reste que dans un premier temps je ne sais pas comment ouvrir le dossier "Download" à la fin du téléchargement, par conséquent je n'ai pas encore été confronté à une éventuelle permission.


function charge_apk(event:Event):void
{
            event.target.removeEventListener(IOErrorEvent.IO_ERROR, onFailure);
            event.target.removeEventListener(Event.COMPLETE, charge_apk);
 
            var file:File = File.userDirectory.resolvePath("Download");
            var fileStream:FileStream = new FileStream();
            fileStream.open(file, FileMode.UPDATE);
            fileStream.writeBytes(event.target.data);
            fileStream.close();
 
  // Ouverture du dossier "Domwload" -> Chemin -> /storage/emulated/0/Download
}
 


#4 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1797 messages

Posté 07 October 2019 - 22:12 PM

je pense que tu n'as pas accès au dossier

try
{
        var file:File = File.userDirectory.resolvePath("Download");
        var fileStream:FileStream = new FileStream();
        fileStream.open(file, FileMode.UPDATE);
        fileStream.writeBytes(event.target.data);
        fileStream.close();
}
catch(error:Error)
{
        trace("Failed:", error.message);
}

as-tu un message d'erreur ?

#5 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 485 messages

Posté 08 October 2019 - 05:40 AM

Bonjour pol2095,

Et bien pour être précis, le téléchargement s'effectu correctement et mon fichier "apk" se trouve bien dans le fichier "Download", ce que je n'ai pas trouvé à écrire dans ma fonction c'est d'ouvrir le fichier "Download" à la fin du téléchargement.
J'ai tenté
file.browseForOpen("/storage/emulated/0/Download");
mais ça n'est pas concluant.

#6 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1797 messages

Posté 08 October 2019 - 08:54 AM

Air 23 n'a pas besoin de permission, c'est à partir de Air 24 et c'est en natif dans la classe File
par contre il faudrait utiliser File.openWithDefaultApplication(), est-ce que ça marche sur Android ? sinon il faut utiliser une ANE

#7 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 485 messages

Posté 08 October 2019 - 17:26 PM

J'avais déjà testé File.openWithDefaultApplication() mais ça n'avait rien donné, je vais du coup ré-essayer en ajoutant ton fichier ANE pour la permission.

#8 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 485 messages

Posté 08 October 2019 - 20:26 PM

Bonsoir pol2095,
J'ai une erreur une fois installé le fichier ANE depuis le descripteur, "L'espace de nom du fichier descripteur d'application est invalide."

#9 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1797 messages

Posté 08 October 2019 - 21:35 PM

Si tu utilises Air 23, pas besoin d'utiliser de permissions

j'ai compilé les ANE avec AIR 33 d'Harman pour pouvoir utiliser ARM64, le problème vient peut-être de là.

essaie avec une ancienne version de l'ANE OpenWithDefaultApplication

#10 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 485 messages

Posté 09 October 2019 - 06:11 AM

Bonjour pol2095,

J'ai le mème message pour les 2 ANE, je viens de mettre à jour le SDK air32 et je n'ai effectivement plus de message d'erreur, cela dit au premier test une fois le téléchargement de mon fichier apk terminé, il se trouve bien dans le dossier "Download" mais il ne se pass rien avec "file.openWithDefaultApplication();" le dossier "Download" ne s'ouvre pas automatiquement.


function charge_apk(event:Event):void
{

event.target.removeEventListener(IOErrorEvent.IO_ERROR, onFailure);
event.target.removeEventListener(Event.COMPLETE, charge_apk);
 
var file:File = File.userDirectory.resolvePath("Download/mon_app.apk");
var fileStream:FileStream = new FileStream();

fileStream.open(file, FileMode.UPDATE);
fileStream.writeBytes(event.target.data);
fileStream.close();
 
file.openWithDefaultApplication();
         
loader_apk = null;

}
 


#11 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1797 messages

Posté 09 October 2019 - 06:39 AM

Regarde j'ai mis un exemple avec l'ANE pour l'utiliser, il faut modifier le descripteur de l'application ("appDescriptor.xml") et j'ai mis le code as3 pour l'utiliser.
Sinon revient à la version Air 23, tu peux télécharger une ancienne version de l'ANE plus haut, pas besoin de modifier le descripteur de l'application, avec le code as3 pour l'utiliser. Google a complexifié les choses depuis la première version.

#12 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 485 messages

Posté 09 October 2019 - 11:16 AM

Je ne suis pas sûr le PC actuellement, mais je crois qu'on ne peut pas revenir sur l'ancienne Version Air23 il faut que je vérifié, ce serait effectivement plus simple de ne pas modifier le fichier XML.

#13 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1797 messages

Posté 10 October 2019 - 12:59 PM

Apparemment il est possible d'avoir plusieurs versions de Air https://gist.github....0ed4309b5bec2fd
Regarde s'il te propose la version 23 dans les paramètres de publication

#14 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 485 messages

Posté 12 October 2019 - 07:13 AM

Rien à faire, j'ai suivi les instruction que j'avais déjà tenté mais j'ai un message: La version du kit sdk d'abobe AIR cible est 28.0.0.125.
Il est possible d'ajouter uniquement un sdk ultérieur à la version 28.0.0.125.

#15 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1797 messages

Posté 12 October 2019 - 14:56 PM

Essaie d'implémenter le dernière ANE...

#16 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 485 messages

Posté 12 October 2019 - 15:23 PM

Salut pol2095,

Je reprends tout à zéro, alors en état actuel je suis en AIR32, j'ai installé le fichier ANE de OpenWithDefaultApplication version 1.0.2 pour la suite peut-tu me guider étape par étape stp, histoire de pas m'emmêler les pinceaux, merci à toi.

#17 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1797 messages

Posté 13 October 2019 - 10:03 AM

1) télécharge la nouvelle version 1.0.3 de l'ANE

2) ajouter le fichier ANE comme un swc

3) modifier l'appDescriptor.xml de cette façon, c'est la balise "android" qu'il faut modifier
à noter la balise "android:authorities", pense à modifier "air.com.openWithDefaultApplication.Test.openwithdefaultapplication_provider" par le nom de ton package dans la balise "id"


<application xmlns="http://ns.adobe.com/air/application/32.0">
        <id>com.openWithDefaultApplication.Test</id>
        <versionnumber>0.0.1</versionnumber>
        <filename>Test</filename>
        <name>Test</name>
        <description><![CDATA[Android OpenWithDefaultApplication Air Native Extension.]]></description>
        <copyright><![CDATA[pol2095]]></copyright>
        <initialwindow>
                <content>main.swf</content>
                <autoorients>true</autoorients>
        </initialwindow>
        <android>
                <manifestadditions>
                        <![CDATA[
                                <manifest android:installLocation="auto"-->
                                        <uses-permission android:name="android.permission.PERMISSION_NAME"/>
                                        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
                                        <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
                                        <application>
                                                <provider android:name="android.support.v4.content.FileProvider" android:granturipermissions="true" android:exported="false" android:authorities="air.com.openWithDefaultApplication.Test.openwithdefaultapplication_provider">
                                                        <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/openwithdefaultapplication_provider_paths"/>
                                                                                                </provider>
                                        </application>
                                </manifest>
                        ]]>
                </manifestadditions>
        </android>
        <extensions>
                <extensionid>com.extensions.file.OpenWithDefaultApplication</extensionid>
        </extensions>
</application>

4) finalement le code as3

import flash.events.PermissionEvent;
import flash.filesystem.File;
import flash.permissions.PermissionStatus;
import com.extensions.file.OpenWithDefaultApplication;

var file:File = File.userDirectory.resolvePath("Download/mon_app.apk");
var bytes:ByteArray;

function charge_apk(event:Event):void
{
        event.target.removeEventListener(IOErrorEvent.IO_ERROR, onFailure);
        event.target.removeEventListener(Event.COMPLETE, charge_apk);

        bytes = event.target.data;

        file.addEventListener(PermissionEvent.PERMISSION_STATUS, permissionStatusHandler);
        file.requestPermission();
}

function permissionStatusHandler(event:PermissionEvent):void
{                                        
        if(event.status == PermissionStatus.GRANTED)
        {                                                
                file.removeEventListener(PermissionEvent.PERMISSION_STATUS, permissionStatusHandler);
                var fileStream:FileStream = new FileStream();
                fileStream.open(file, FileMode.UPDATE);
                fileStream.writeBytes(bytes);
                fileStream.close();
                         
                loader_apk = null;
               
                permissionAPK();
        }
        else
        {
                trace("L'application n'a pas le droit d'écrire dans le dossier \"Download\".");
        }
}

function permissionAPK():void
{
        OpenWithDefaultApplication.extension.addEventListener(PermissionEvent.PERMISSION_STATUS, permissionAPKStatusHandler);  
        OpenWithDefaultApplication.open(file.url);
}

function permissionAPKStatusHandler(event:PermissionEvent):void
{
        if( event.status == "trusted" )
        {
                OpenWithDefaultApplication.extension.removeEventListener(PermissionEvent.PERMISSION_STATUS, permissionAPKStatusHandler);
                OpenWithDefaultApplication.install();
        }
        else
        {
                trace("L'application n'a pas le droit de lancer les fichiers APK.");
                // lancer une boîte de dialogue avec "Si vous avez autorisé l'installation d'application, finaliser l'installation" avec un bouton "ok" pour relancer "permissionAPK();" ou un bouton "annuler" qui ne lance rien
                }
}


#18 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 485 messages

Posté 14 October 2019 - 17:46 PM

Bonsoir pol2095,

Je n'ai pas eu de temps pour travailler ce week-end, gros merci pour ton aide et ton temps passé, je mis met dès ce soir et te donnerais le résultat final.

Merci à toi ;-)

#19 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 485 messages

Posté 14 October 2019 - 21:15 PM

J'ai fait toute les modifications, à noter que le descripteur n'était plus lisible, j'ai modifié cette partie

<![CDATA[
en retirant les 2 tirets ce qui le rend à nouveau lisible , au premier essai j'obtiens un message d'erreur: Accès à la propriété non définie PermissionStatus.

#20 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1797 messages

Posté 15 October 2019 - 00:46 AM

ce site fait n'importe quoi, il rajoute des balises, dans le fichier de l'ane il y a un exemple de l'app descriptor

#21 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 485 messages

Posté 15 October 2019 - 06:06 AM

Le fichier descripteur est à jour maintenant, reste le message d'erreur: Accès à la propriété non définie PermissionStatus sur la condition ici "if (event.status == PermissionStatus.GRANTED)"

#22 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1797 messages

Posté 15 October 2019 - 08:23 AM

ajoute

import flash.permissions.PermissionStatus;


#23 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 485 messages

Posté 15 October 2019 - 21:22 PM

C'est ok ça fonctionne parfaitement, je te remercie vraiment pour ton aide, toutefois je ne pensais pas que cela demandait autants de modifications, ajout d'un fichier ANE, modification du fichier XML plus le script AS3, je ne me serait pas lancé si j'avais su ça au départ, cela dit j'appréciais bien cette idée d'amener l'utilisateur directement sur le nouvel APK pour l'installer, encore un gros merci à toi.

#24 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1797 messages

Posté 16 October 2019 - 19:50 PM

Très bien si ça fonctionne, avec le nouveau sdk Harman, tu peux même compiler ton application en 64 bit, l'ANE est compatible.



2 utilisateur(s) li(sen)t ce sujet

0 membre(s), 2 invité(s), 0 utilisateur(s) anonyme(s)