Jump to content
bioslord

Démarrer intent pour lire un PDF depuis une URL

Recommended Posts

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 ...

Edited by gogui63

Share this post


Link to post
Share on other sites

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();

Share this post


Link to post
Share on other sites

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 .

Share this post


Link to post
Share on other sites

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 ! :-)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

@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 !

Edited by Sylvain Duché

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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é
}

Share this post


Link to post
Share on other sites

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 ?

Edited by gogui63

Share this post


Link to post
Share on other sites

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);
}
Edited by chpil

Share this post


Link to post
Share on other sites

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);
	   }
	  }


	 });
	 };
}

Share this post


Link to post
Share on other sites

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

Edited by gogui63

Share this post


Link to post
Share on other sites

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;
 }

Share this post


Link to post
Share on other sites

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 :|

Edited by gogui63

Share this post


Link to post
Share on other sites

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)) {
  ...

Share this post


Link to post
Share on other sites

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 ?

Edited by gogui63

Share this post


Link to post
Share on other sites

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...

Share this post


Link to post
Share on other sites

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

Edited by gogui63

Share this post


Link to post
Share on other sites

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 ?

Edited by chpil

Share this post


Link to post
Share on other sites

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

Edited by gogui63

Share this post


Link to post
Share on other sites

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

  • Like 1

Share this post


Link to post
Share on other sites

Comme tu préfère mais je tenais à mettre à quelque chose ;)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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, ...

Share this post


Link to post
Share on other sites

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 ?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.






×
×
  • Create New...