gogui63 Posté(e) 7 mai 2012 Share Posté(e) 7 mai 2012 (modifié) Merci de m'avoir répondu, j'ai bien compris j'ai lu mais je ne sais pas comment copié mon pdf dans un dossier temporaire pour y avoir accès ... C'est la seule chose ou je bloque : déplacer mon PDF dans un dossier temporaire et le lire ; si quelqu'un me montre on m'explique la démarche je lui en serait reconnaissant, merci d'avance Je me suis renseigné , il faut donc intégrer les PDF comme ressources "brutes" et passer par une fonction tel que MODE_WORLD_READABLE pour pouvoir autorisé une autre application a pouvoir lire cette ressource mais je n'ai toujours rien trouvé sur comment la copié dans un fichier temporaire ... Modifié 8 mai 2012 par gogui63 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 9 mai 2012 Share Posté(e) 9 mai 2012 Regarde ce lien : http://stackoverflow.com/questions/8664468/copying-raw-file-into-sdcard Pour la variable somePathOnSdCard de la réponse tu fais: File sdCardCustomFolder = new File(Environment.getExternalStorageDirectory(), "pdf folder"); if (!sdCardCustomFolder.exists()) sdCardCustomFolder.mkdirs(); File fileSdCard = new File(sdCardCustomFolder, "mon_fichier_pdf.pdf"); String somePathOnSdCard = fileSdCard.getPath(); Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gogui63 Posté(e) 9 mai 2012 Share Posté(e) 9 mai 2012 Il y a un autre moyen que de les copier sur la carteSD ? Car j'aimerai que mes fichiers pdfs soient un minimum protégés et non récupérables , sinon merci pour le coup de pouce , ça avance doucement mais surement . Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 9 mai 2012 Share Posté(e) 9 mai 2012 Tu peux les stocker ds la zone réservée de ton app, mais je ne sais pas si les viewers pdf pourront y avoir accès, et meme la... Android is Android, tu peux récupérer ce que tu veux vu que le device est reconnu comme un espace de stockage lorsqu'il est connecté a un PC ! Le seul moyen de "cacher" tes Pdf c'etait en effet de les mettre ds les assets comme tu l'as fait, mais alors la lecture des Pdf ne marche pas... Impasse ! :-) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 9 mai 2012 Share Posté(e) 9 mai 2012 Non, la zone réservée d'une application, où sont stockés les fichiers privés de l'application (préférences, bases de données, ...) n'est pas accessible depuis un PC lorsque le device est monté sur le PC. Par contre, il est possible d'y créer des fichiers, et de donner le droit de lecture/écriture sur ces fichiers aux autres applications (pour peu qu'elles connaissent le nom du fichier) Pour créer un tel fichier, tu as la méthode openFileOutput qui te le permet, et pour récupérer le chemin complet du fichier (pour pouvoir l'indiquer aux autres applications), tu as la méthode getFileStreamPath FileOutputStream fos = openFileOutput("nom de mon fichier.pdf", MODE_WORLD_READABLE); // Fichier accessible en lecture par d'autres applications // ... écriture dans le fichier // File f = getFileStreamPath("nom de mon fichier.pdf"); String name = f.getAbsolutePath(); // name contient le chemin absolu du fichier Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 9 mai 2012 Share Posté(e) 9 mai 2012 (modifié) @chpil: Ds mon dernier post je parlais de la zone SdCard dédiée a une app. Mais ta solution resoud en effet le pb si le Pdf viewer peut acceder au fichier ds la zone interne de l'app ! Modifié 9 mai 2012 par Invité Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gogui63 Posté(e) 9 mai 2012 Share Posté(e) 9 mai 2012 Merci, je vois un peu plus clair et une petite question ( encore, et surement pas la dernière ) quel chemin dois je indiquer a adobe reader pour trouver mon PDF ? Ça : String name = f.getAbsolutePath(); // name contient le chemin absolu du fichier Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 10 mai 2012 Share Posté(e) 10 mai 2012 Quelque chose comme cela devrait fonctionner String name = f.getAbsolutePath(); try { Uri uri = Uri.parse("file://" + name); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(uri, "application/pdf"); startActivity(intent); } catch (ActivityNotFound e) { // Cas d'erreur si pas de lecteur PDF installé } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gogui63 Posté(e) 12 mai 2012 Share Posté(e) 12 mai 2012 (modifié) Bonsoir tout le monde grâce à ce forum et un énorme coup de pouce de chpil j'ai encore besoin de vous et je viens encore vous embêter, voila ma list view j'aimerai donc lorsque je clique sur l'item "Nombre complexes" un pdf se lance situé dans les assets "test.pdf" mais je n'arrive pas à obtenir regrouper toute les informations de ce post pour y arriver voila le code : package com.androiddev.tab; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.app.AlertDialog; import android.content.ActivityNotFoundException; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; public class Tab4 extends Activity { private ListView maListViewPerso14; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.onglet4); maListViewPerso14 = (ListView) findViewById(R.id.listView14); ArrayList<HashMap<String, String>> listItem11= new ArrayList<HashMap<String, String>>(); HashMap<String, String> map11; map11 = new HashMap<String, String>(); map11.put("titre", "1 - Nombres complexes "); map11.put("img", String.valueOf(R.drawable.fleche)); listItem11.add(map11); SimpleAdapter mSchedule111 = new SimpleAdapter (this.getBaseContext(), listItem11, R.layout.afichageitem, new String[] {"img", "titre" }, new int[] {R.id.fleche, R.id.titre}); maListViewPerso14.setAdapter(mSchedule111); //maListViewPerso14.setOnItemClickListener(new OnItemClickListener() { //@SuppressWarnings("unchecked") //public void onItemClick(AdapterView<?> a, View v, int position, long id) { maListViewPerso14.setOnItemClickListener(new OnItemClickListener() { @SuppressWarnings("unchecked") public void onItemClick(AdapterView<?> a, View v, int position, long id) { //on récupère la HashMap contenant les infos de notre item (titre, description, img) HashMap<String, String> map = (HashMap<String, String>) maListViewPerso14.getItemAtPosition(position); FileOutputStream fos = openFileOutput("test.pdf", MODE_WORLD_READABLE); // Fichier accessible en lecture par d'autres applications // ... écriture dans le fichier // File f = getFileStreamPath("test.pdf"); String name = f.getAbsolutePath(); try { Uri uri = Uri.parse("file://" + name); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(uri, "application/pdf"); startActivity(intent); } catch (ActivityNotFoundException e) { // Cas d'erreur si pas de lecteur PDF installé } } }); }; } J'ai une erreur avec ce code sur FileOutputStream fos = openFileOutput("test.pdf", MODE_WORLD_READABLE); Eclipse me souligne plus precisement le "openFileOutput("test.pdf", MODE_WORLD_READABLE)" avec comme erreur : Description Resource Path Location Type Unhandled exception type FileNotFoundException Tab4.java /tabAndroid/src/com/androiddev/tab line 61 Java Problem Je ne vois pas pourquoi ? Modifié 13 mai 2012 par gogui63 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 14 mai 2012 Share Posté(e) 14 mai 2012 (modifié) Il te dit que tu ne gères pas l'exception FileNotFoundException pouvant être levée lors de l'appel à la méthode openFileOutput. Il faut englober ce traitement dans un bloc try/catch (ou étendre celui existant) Par ex. try{ FileOutputStream fos = openFileOutput("test.pdf", MODE_WORLD_READABLE); // ... blah blah blah Uri uri = Uri.parse("file://" + name); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(uri, "application/pdf"); startActivity(intent); } catch (FileNotFoundException e) { // Cas d'erreur de création de fichier Log.d("xx", "Erreur creation fichier ", e); } catch (ActivityNotFoundException e) { // Cas d'erreur si pas de lecteur PDF installé Log.d("xx", "Erreur affichage PDF", e); } Modifié 14 mai 2012 par chpil Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gogui63 Posté(e) 14 mai 2012 Share Posté(e) 14 mai 2012 Merci mais maintenant lorsque je clique sur mon item pour lancer mon PDF adobe reader se lance bien mais j'ai une erreur : Ce document est vide (taille de 0ko). Pourtant mon PDF présente bien du texte il ne fait pas 0ko et j'ai un avertissement sur FileOutputStream fos plus précisément sur le fos" avec comme avertissement : the value of the local variable fos is not used. Je pense que ça vient de là ? OU est ce plus haut dans mon code ? maListViewPerso14.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> a, View v, int position, long id) { //on récupère la HashMap contenant les infos de notre item (titre, description, img) HashMap<String, String> map = (HashMap<String, String>) maListViewPerso14.getItemAtPosition(position); try{ FileOutputStream fos = openFileOutput("test.pdf", MODE_WORLD_READABLE); // Fichier accessible en lecture par d'autres applications // ... écriture dans le fichier // File f = getFileStreamPath("test.pdf"); String name = f.getAbsolutePath(); Uri uri = Uri.parse("file://" + name); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(uri, "application/pdf"); startActivity(intent); } catch (FileNotFoundException e) { // Cas d'erreur de création de fichier Log.d("xx", "Erreur creation fichier ", e); } catch (ActivityNotFoundException e) { // Cas d'erreur si pas de lecteur PDF installé Log.d("xx", "Erreur affichage PDF", e); } } }); }; } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gogui63 Posté(e) 15 mai 2012 Share Posté(e) 15 mai 2012 (modifié) Je me demandé aussi pourquoi FileOutputStream fos = openFileOutput("test.pdf", MODE_WORLD_READABLE); et pas plutôt FileInputStream ? Mais quand j'essaie FileIntpuStream fos = openFileInput("test.pdf", MODE_WORLD_READABLE); J'ai une erreur dans eclipse et lorsque je fais : FileIntpuStream fos = openFileInput("test.pdf"); Idem erreur du reader qui m'indique une taille de 0ko et "fos" indiqué comme inutilisé Je tourne en rond :S Modifié 15 mai 2012 par gogui63 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 15 mai 2012 Share Posté(e) 15 mai 2012 C'est logique que le fichier fasse 0ko, puisqu'il n'a pas été copié. Il y avait des "trous" dans mon exemple de code, qu'il fallait remplir avec le nécessaire, fonction de ce que tu as besoin de faire (et en s'aidant des références déjà indiquées dans ce post précédemment) Donc, dans ton OnItemClickListener, cela pourrait devenir quelque chose comme cela String nomFichierDansAsset = "toto.pdf"; String nomFichierTemp = "truc.pdf"; if (copyAssetToTempFile(nomFichierDansAsset, nomFichierTemp)) { try { String name = getFileStreamPath(nomFichierTemp).getAbsolutePath(); Uri uri = Uri.parse("file://" + name); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(uri, "application/pdf"); startActivity(intent); } catch (ActivityNotFoundException e) { // Cas d'erreur si pas de lecteur PDF installé Log.d("xx", "Erreur affichage PDF", e); } } Avec une méthode supplémentaire rajoutée dans ton Activity private boolean copyAssetToTempFile(String nomFichierAsset, String nomFichierTemp) { boolean result = true; try { byte[] buffer = new byte[512]; FileOutputStream fos = openFileOutput(nomFichierTemp, MODE_WORLD_READABLE); InputStream is = getAssets().open(nomFichierAsset); int bytesRead = is.read(buffer); while (bytesRead > 0) { fos.write(buffer, 0, bytesRead); bytesRead = is.read(buffer); } fos.close(); is.close(); } catch (FileNotFoundException e) { // Cas d'erreur de création de fichier Log.d("xx", "Erreur creation fichier ", e); result = false; } catch (IOException e) { // Cas d'erreur de lecture de fichier Log.d("xx", "Erreur lecture fichier", e); result = false; } return result; } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gogui63 Posté(e) 15 mai 2012 Share Posté(e) 15 mai 2012 (modifié) Merci beaucoup Chpil ! Ma touche F5 a faillit rendre l’âme lol, j'ai désormais toute les clés en main pour finir mon application, je repasserai surement avec encore quelques questions mais c'est déjà parfait tout ça , encore merci ;) Voila je reviens à la charge... J'ai essayé quelque trucs , j'arrive à lancer mon PDF comme voulu mais j'aimerai si possible deux trucs : Je me suis rendu compte que ma listview entiere était associé à mon PDF or je ne veux qu'un item en particulier sur cette Lisview ( actuellement lorsque je clique sur n'importe quel item de ma ListView , c'est toujours le même PDF ) j'avais penser à quelque chose comme HashMap<String, String> map = (HashMap<String, String>) maListViewPerso.getItemAtPosition(position); pour récupérer l'item précisément que je veux mais je ne vois pas comment le réutiliser dans mon code et associer un pdf avec un item et non la ListView entière :mellow: Deuxième question, j'ai toujours une erreur de syntaxe quand il y a plusieurs ListView . Je pensais qu'il fallait prendre cette partie : maListViewPerso2.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> a, View v, int position, long id) { String nomFichierDansAsset = "S1.pdf"; String nomFichierTemp = "S1.pdf"; if (copyAssetToTempFile(nomFichierDansAsset, nomFichierTemp)) { try { String name = getFileStreamPath(nomFichierTemp).getAbsolutePath(); Uri uri = Uri.parse("file://" + name); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(uri, "application/pdf"); startActivity(intent); } catch (ActivityNotFoundException e) { // Cas d'erreur si pas de lecteur PDF installé Log.d("xx", "Erreur affichage PDF", e); } } } private boolean copyAssetToTempFile(String nomFichierAsset, String nomFichierTemp) { boolean result = true; try { byte[] buffer = new byte[512]; FileOutputStream fos = openFileOutput(nomFichierTemp, MODE_WORLD_READABLE); InputStream is = getAssets().open(nomFichierAsset); int bytesRead = is.read(buffer); while (bytesRead > 0) { fos.write(buffer, 0, bytesRead); bytesRead = is.read(buffer); } fos.close(); is.close(); } catch (FileNotFoundException e) { // Cas d'erreur de création de fichier Log.d("xx", "Erreur creation fichier ", e); result = false; } catch (IOException e) { // Cas d'erreur de lecture de fichier Log.d("xx", "Erreur lecture fichier", e); result = false; } return result; } Et la répéter en adaptant maListViewPerso2 par maListViewPerso3 mais j'ai plusieurs erreurs de syntaxe avec les } qui manque ou que je dois rajouter enfin j'ai encore besoin de votre aide :| Modifié 16 mai 2012 par gogui63 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 18 mai 2012 Share Posté(e) 18 mai 2012 1) la méthode copyAssetToTempFile est à définir au niveau de l'Activity; pas la peine de la (re)définir dans chaque listener 2) pour les erreurs de syntaxe, c'est un peu le B.A.BA du langage; toute parenthèse, toute accolade (qui définissent un bloc de code) doivent être appariées. Eclipse t'aide très bien pour cela en t'indiquant à quelle accolade ouvrante correspond une accolade fermante (idem parenthèse) 3) pour associer un nom de fichier à chaque item d'une liste, tu peux par exemple rajouter une entrée dans la Map qui correspond à l'item, que tu mets dans la liste passée à l'Adapter lors de la construction de la liste. Ainsi, ensuite, dans le listener, tu pourras récupérer cette entrée de la Map, et avoir ainsi ton nom de fichier Lors de la construction de la liste: ArrayList<HashMap<String, String>> listItem11= new ArrayList<HashMap<String, String>>(); HashMap<String, String> map11; map11 = new HashMap<String, String>(); map11.put("titre", "1 - Nombres complexes "); map11.put("img", String.valueOf(R.drawable.fleche)); map11.put("file", "nom_du_fichier_asset_a_associer.pdf"); listItem11.add(map11); Et dans le listener: maListViewPerso2.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> a, View v, int position, long id) { HashMap<String, String> map = (HashMap<String, String>) maListViewPerso.getItemAtPosition(position); String nomFichierDansAsset = map.get("file"); String nomFichierTemp = "S1.pdf"; if (copyAssetToTempFile(nomFichierDansAsset, nomFichierTemp)) { ... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gogui63 Posté(e) 19 mai 2012 Share Posté(e) 19 mai 2012 (modifié) Merci j'ai réussi a associer un item avec un PDF mais j'ai erreur ( force close à chaque fois que je clique sur ma 2eme ListView) Voila le code en question ( aucune erreur sous eclipse pourtant ) maListViewPerso2.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> a, View v, int position, long id) { HashMap<String, String> map = (HashMap<String, String>) maListViewPerso2.getItemAtPosition(position); String nomFichierDansAsset = map.get("file"); String nomFichierTemp = "list1.pdf"; if (copyAssetToTempFile(nomFichierDansAsset, nomFichierTemp)) { try { String name = getFileStreamPath(nomFichierTemp).getAbsolutePath(); Uri uri = Uri.parse("file://" + name); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(uri, "application/pdf"); startActivity(intent); } catch (ActivityNotFoundException e) { // Cas d'erreur si pas de lecteur PDF installé Log.d("xx", "Erreur affichage PDF", e); } } } }); maListViewPerso3.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> a, View v, int position, long id) { HashMap<String, String> map = (HashMap<String, String>) maListViewPerso3.getItemAtPosition(position); String nomFichierDansAsset = map.get("file"); String nomFichierTemp = "list3"; if (copyAssetToTempFile(nomFichierDansAsset, nomFichierTemp)) { try { String name = getFileStreamPath(nomFichierTemp).getAbsolutePath(); Uri uri = Uri.parse("file://" + name); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(uri, "application/pdf"); startActivity(intent); } catch (ActivityNotFoundException e) { // Cas d'erreur si pas de lecteur PDF installé Log.d("xx", "Erreur affichage PDF", e); } } } }); }; private boolean copyAssetToTempFile(String nomFichierAsset, String nomFichierTemp) { boolean result = true; try { byte[] buffer = new byte[512]; FileOutputStream fos = openFileOutput(nomFichierTemp, MODE_WORLD_READABLE); InputStream is = getAssets().open(nomFichierAsset); int bytesRead = is.read(buffer); while (bytesRead > 0) { fos.write(buffer, 0, bytesRead); bytesRead = is.read(buffer); } fos.close(); is.close(); } catch (FileNotFoundException e) { // Cas d'erreur de création de fichier Log.d("xx", "Erreur creation fichier ", e); result = false; } catch (IOException e) { // Cas d'erreur de lecture de fichier Log.d("xx", "Erreur lecture fichier", e); result = false; } return result; } } Il vous faut le Logcat ? Modifié 19 mai 2012 par gogui63 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 21 mai 2012 Share Posté(e) 21 mai 2012 Bien évidemment que la trace de l'exception qui se produit quand ça plante serait d'une grande utilité pour comprendre quel est le problème... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gogui63 Posté(e) 21 mai 2012 Share Posté(e) 21 mai 2012 (modifié) Le problème c'est que le Logcat me dit qu'il y a des erreur mais il n'y a pas de ligne "caused by .... " je vais essayer de reprovoquer l'erreur et vous copie le logcat le voila : 05-21 09:00:53.562: D/dalvikvm(219): GC freed 511 objects / 46016 bytes in 323ms 05-21 09:00:53.573: D/ddm-heap(219): Got feature list request 05-21 09:01:44.701: D/xx(219): Erreur affichage PDF 05-21 09:01:44.701: D/xx(219): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///data/data/com.androiddev.tab/files/list1.pdf typ=application/pdf } 05-21 09:01:44.701: D/xx(219): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1408) 05-21 09:01:44.701: D/xx(219): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378) 05-21 09:01:44.701: D/xx(219): at android.app.Activity.startActivityFromChild(Activity.java:2989) 05-21 09:01:44.701: D/xx(219): at android.app.Activity.startActivityForResult(Activity.java:2769) 05-21 09:01:44.701: D/xx(219): at android.app.Activity.startActivity(Activity.java:2855) 05-21 09:01:44.701: D/xx(219): at com.androiddev.tab.Tab2$2.onItemClick(Tab2.java:236) 05-21 09:01:44.701: D/xx(219): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 05-21 09:01:44.701: D/xx(219): at android.widget.ListView.performItemClick(ListView.java:3285) 05-21 09:01:44.701: D/xx(219): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640) 05-21 09:01:44.701: D/xx(219): at android.os.Handler.handleCallback(Handler.java:587) 05-21 09:01:44.701: D/xx(219): at android.os.Handler.dispatchMessage(Handler.java:92) 05-21 09:01:44.701: D/xx(219): at android.os.Looper.loop(Looper.java:123) 05-21 09:01:44.701: D/xx(219): at android.app.ActivityThread.main(ActivityThread.java:4363) 05-21 09:01:44.701: D/xx(219): at java.lang.reflect.Method.invokeNative(Native Method) 05-21 09:01:44.701: D/xx(219): at java.lang.reflect.Method.invoke(Method.java:521) 05-21 09:01:44.701: D/xx(219): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 05-21 09:01:44.701: D/xx(219): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 05-21 09:01:44.701: D/xx(219): at dalvik.system.NativeStart.main(Native Method) 05-21 09:01:47.543: D/xx(219): Erreur affichage PDF 05-21 09:01:47.543: D/xx(219): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///data/data/com.androiddev.tab/files/list1.pdf typ=application/pdf } 05-21 09:01:47.543: D/xx(219): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1408) 05-21 09:01:47.543: D/xx(219): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378) 05-21 09:01:47.543: D/xx(219): at android.app.Activity.startActivityFromChild(Activity.java:2989) 05-21 09:01:47.543: D/xx(219): at android.app.Activity.startActivityForResult(Activity.java:2769) 05-21 09:01:47.543: D/xx(219): at android.app.Activity.startActivity(Activity.java:2855) 05-21 09:01:47.543: D/xx(219): at com.androiddev.tab.Tab2$2.onItemClick(Tab2.java:236) 05-21 09:01:47.543: D/xx(219): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 05-21 09:01:47.543: D/xx(219): at android.widget.ListView.performItemClick(ListView.java:3285) 05-21 09:01:47.543: D/xx(219): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640) 05-21 09:01:47.543: D/xx(219): at android.os.Handler.handleCallback(Handler.java:587) 05-21 09:01:47.543: D/xx(219): at android.os.Handler.dispatchMessage(Handler.java:92) 05-21 09:01:47.543: D/xx(219): at android.os.Looper.loop(Looper.java:123) 05-21 09:01:47.543: D/xx(219): at android.app.ActivityThread.main(ActivityThread.java:4363) 05-21 09:01:47.543: D/xx(219): at java.lang.reflect.Method.invokeNative(Native Method) 05-21 09:01:47.543: D/xx(219): at java.lang.reflect.Method.invoke(Method.java:521) 05-21 09:01:47.543: D/xx(219): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 05-21 09:01:47.543: D/xx(219): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 05-21 09:01:47.543: D/xx(219): at dalvik.system.NativeStart.main(Native Method) 05-21 09:01:48.403: D/xx(219): Erreur affichage PDF 05-21 09:01:48.403: D/xx(219): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///data/data/com.androiddev.tab/files/list1.pdf typ=application/pdf } 05-21 09:01:48.403: D/xx(219): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1408) 05-21 09:01:48.403: D/xx(219): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378) 05-21 09:01:48.403: D/xx(219): at android.app.Activity.startActivityFromChild(Activity.java:2989) 05-21 09:01:48.403: D/xx(219): at android.app.Activity.startActivityForResult(Activity.java:2769) 05-21 09:01:48.403: D/xx(219): at android.app.Activity.startActivity(Activity.java:2855) 05-21 09:01:48.403: D/xx(219): at com.androiddev.tab.Tab2$2.onItemClick(Tab2.java:236) 05-21 09:01:48.403: D/xx(219): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 05-21 09:01:48.403: D/xx(219): at android.widget.ListView.performItemClick(ListView.java:3285) 05-21 09:01:48.403: D/xx(219): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640) 05-21 09:01:48.403: D/xx(219): at android.os.Handler.handleCallback(Handler.java:587) 05-21 09:01:48.403: D/xx(219): at android.os.Handler.dispatchMessage(Handler.java:92) 05-21 09:01:48.403: D/xx(219): at android.os.Looper.loop(Looper.java:123) 05-21 09:01:48.403: D/xx(219): at android.app.ActivityThread.main(ActivityThread.java:4363) 05-21 09:01:48.403: D/xx(219): at java.lang.reflect.Method.invokeNative(Native Method) 05-21 09:01:48.403: D/xx(219): at java.lang.reflect.Method.invoke(Method.java:521) 05-21 09:01:48.403: D/xx(219): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 05-21 09:01:48.403: D/xx(219): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 05-21 09:01:48.403: D/xx(219): at dalvik.system.NativeStart.main(Native Method) 05-21 09:01:49.192: D/AndroidRuntime(219): Shutting down VM 05-21 09:01:49.192: W/dalvikvm(219): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 05-21 09:01:49.192: E/AndroidRuntime(219): Uncaught handler: thread main exiting due to uncaught exception 05-21 09:01:49.202: E/AndroidRuntime(219): java.lang.NullPointerException 05-21 09:01:49.202: E/AndroidRuntime(219): at android.content.res.AssetManager.openAsset(Native Method) 05-21 09:01:49.202: E/AndroidRuntime(219): at android.content.res.AssetManager.open(AssetManager.java:299) 05-21 09:01:49.202: E/AndroidRuntime(219): at android.content.res.AssetManager.open(AssetManager.java:273) 05-21 09:01:49.202: E/AndroidRuntime(219): at com.androiddev.tab.Tab2.copyAssetToTempFile(Tab2.java:258) 05-21 09:01:49.202: E/AndroidRuntime(219): at com.androiddev.tab.Tab2.access$1(Tab2.java:250) 05-21 09:01:49.202: E/AndroidRuntime(219): at com.androiddev.tab.Tab2$1.onItemClick(Tab2.java:204) 05-21 09:01:49.202: E/AndroidRuntime(219): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 05-21 09:01:49.202: E/AndroidRuntime(219): at android.widget.ListView.performItemClick(ListView.java:3285) 05-21 09:01:49.202: E/AndroidRuntime(219): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640) 05-21 09:01:49.202: E/AndroidRuntime(219): at android.os.Handler.handleCallback(Handler.java:587) 05-21 09:01:49.202: E/AndroidRuntime(219): at android.os.Handler.dispatchMessage(Handler.java:92) 05-21 09:01:49.202: E/AndroidRuntime(219): at android.os.Looper.loop(Looper.java:123) 05-21 09:01:49.202: E/AndroidRuntime(219): at android.app.ActivityThread.main(ActivityThread.java:4363) 05-21 09:01:49.202: E/AndroidRuntime(219): at java.lang.reflect.Method.invokeNative(Native Method) 05-21 09:01:49.202: E/AndroidRuntime(219): at java.lang.reflect.Method.invoke(Method.java:521) 05-21 09:01:49.202: E/AndroidRuntime(219): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 05-21 09:01:49.202: E/AndroidRuntime(219): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 05-21 09:01:49.202: E/AndroidRuntime(219): at dalvik.system.NativeStart.main(Native Method) 05-21 09:01:49.222: I/dalvikvm(219): threadid=7: reacting to signal 3 05-21 09:01:49.232: E/dalvikvm(219): Unable to open stack trace file '/data/anr/traces.txt': Permission denied Modifié 21 mai 2012 par gogui63 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 21 mai 2012 Share Posté(e) 21 mai 2012 (modifié) Tu as un NullPointerException, lorsque ton application essaye d'ouvrir le fichier asset sélectionné. As-tu bien associé une donnée "file" à l'élément de ta liste, dans la HashMap lorsque tu construis l'Adapter ? Modifié 21 mai 2012 par chpil Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gogui63 Posté(e) 21 mai 2012 Share Posté(e) 21 mai 2012 (modifié) Merci en effet une erreur vraiment bête , à vouloir chercher compliqué ,c'etait simplement que j'avais mis map.put("file", "S4.pdf"); au lieu de map1.put("file", "S4.pdf"); Voila et ce petit "1" changé tout . Des fois ça netient à rien une erreur enfin merci encore chpil Voila application terminé, je tient encore à le dire , je te remercie beaucoup Chpil , il faut le reconnaître sans toi j'aurai déjà abandonné ... Je peux te mettre dans les crédit de mon application ? Ça serait un petit merci pour tout ce que tu as fait, Pseudo ou ton vrai nom contact MP Modifié 21 mai 2012 par gogui63 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 21 mai 2012 Share Posté(e) 21 mai 2012 Merci pour les crédits :) Mais quelque chose comme "Réalisée avec l'aide de la communauté des développeurs de FrAndroid" me paraît tout aussi bien 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gogui63 Posté(e) 21 mai 2012 Share Posté(e) 21 mai 2012 Comme tu préfère mais je tenais à mettre à quelque chose ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gogui63 Posté(e) 22 mai 2012 Share Posté(e) 22 mai 2012 Bonjour, je reviens encore, lorsque je clique sur une listview ça ouvre bien le PDF sauf que je viens de me rendre compte que une fois sur adobe les pdfs peuvent être modifié et même envoyé par mail or je.ne.veux absolument pas que mes PDF puissent être modifié/partageais ... j avais pensé a modifier les permissions dans le manifest mais je ne vois pas quoi ? Ou il faut intervenir directement.dans.le.code ? Envoyé depuis mon Samsung Galaxy S2 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 22 mai 2012 Share Posté(e) 22 mai 2012 Il n'y a malheureusement rien à faire, dans ton cas. A partir du moment où tu es obligé de passer par une autre application pour afficher un pdf, tu es obligé de donner à cette application les droits en lecture sur ton pdf; mais à partir de là, puisqu'elle peut lire le document, l'application peut faire ce qu'elle veut du contenu de ce document, et tu ne pourras pas l'empêcher de l'envoyer par mail, de le modifier, ... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gogui63 Posté(e) 22 mai 2012 Share Posté(e) 22 mai 2012 Mince ... La c'est vraiment embêtant ... et je suppose que c'est la seul méthode pour arriver a faire ce que je veux ? Car quoi qu'il arrive il faut céder la main à une application tierce ... ? La seule "solution" serait de transformer mes PDFs en images et ainsi je pourrai les laissées directement dans l'application ? Ma nouvelle question est alors quelles sont les ressources externes qui peuvent être gérées directement dans l'application ? Je sais que il y a les images , mais il y a quoi d'autre ? Une autre solution serait de d’intégrer mes PDFs directement sous forme de texte brut via un String ressource ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.