Bonjour à tous!
Voilà, j'aimerais savoir comment lancer une application téléchargée depuis le market(exemple: Angry Birds) à l'aide d'un intent?
Pouvez-vous me donner la procédure ou bien m'éclairer svp??
Merci!![]()
Bonjour à tous!
Voilà, j'aimerais savoir comment lancer une application téléchargée depuis le market(exemple: Angry Birds) à l'aide d'un intent?
Pouvez-vous me donner la procédure ou bien m'éclairer svp??
Merci!![]()
Bonjour,
Tu peux appeler une application via son namespace :
exemple :
C'est pour appeler l'application Codebar.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Intent intentScan = new Intent("com.google.zxing.client.android.SCAN"); intentScan.addCategory(Intent.CATEGORY_DEFAULT); try { activity.startActivityForResult(intentScan, REQUEST_CODE); } catch (ActivityNotFoundException e) { showDownloadDialog(activity, stringTitle, stringMessage, stringButtonYes, stringButtonNo); }
Cordialement,
Merci beaucoup pour ton aide!
Par contre, faut-il que je le déclare dans le Manifest??
Si oui, comment??
Il n'y a rien besoin de rajouter dans le manifeste. juste ces lignes de commandes. Si ça ne démarre pas c'est que le namespace est faux.
Bonjour
j'ai le même problème mais malgrés ce post et celui-ci je n'ai pas réussi à la résoudre.
En fait j'aimerais lancer une application depuis une autre mais ceux sont deux applis que j'ai moi-même créer.
Pour celà j'ai tester le code
(je lance mon appli par un clic sur le bouton pont1)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 pont1.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_RUN); intent.setComponent(new ComponentName("com.gatab", "GaTabAct")); startActivity(intent); } });
et j'ai les erreurs suivantes lorsque je clique sur mon bouton :
J'ai essayé le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 07-20 11:43:43.405: ERROR/AndroidRuntime(806): FATAL EXCEPTION: main 07-20 11:43:43.405: ERROR/AndroidRuntime(806): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.gatab/GaTabAct}; have you declared this activity in your AndroidManifest.xml? 07-20 11:43:43.405: ERROR/AndroidRuntime(806): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1404) 07-20 11:43:43.405: ERROR/AndroidRuntime(806): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378) 07-20 11:43:43.405: ERROR/AndroidRuntime(806): at android.app.Activity.startActivityForResult(Activity.java:2817) 07-20 11:43:43.405: ERROR/AndroidRuntime(806): at android.app.Activity.startActivity(Activity.java:2923) 07-20 11:43:43.405: ERROR/AndroidRuntime(806): at com.gaside.Gaside$1.onClick(Gaside.java:39) 07-20 11:43:43.405: ERROR/AndroidRuntime(806): at android.view.View.performClick(View.java:2408) 07-20 11:43:43.405: ERROR/AndroidRuntime(806): at android.view.View$PerformClick.run(View.java:8816) 07-20 11:43:43.405: ERROR/AndroidRuntime(806): at android.os.Handler.handleCallback(Handler.java:587) 07-20 11:43:43.405: ERROR/AndroidRuntime(806): at android.os.Handler.dispatchMessage(Handler.java:92) 07-20 11:43:43.405: ERROR/AndroidRuntime(806): at android.os.Looper.loop(Looper.java:123) 07-20 11:43:43.405: ERROR/AndroidRuntime(806): at android.app.ActivityThread.main(ActivityThread.java:4627) 07-20 11:43:43.405: ERROR/AndroidRuntime(806): at java.lang.reflect.Method.invokeNative(Native Method) 07-20 11:43:43.405: ERROR/AndroidRuntime(806): at java.lang.reflect.Method.invoke(Method.java:521) 07-20 11:43:43.405: ERROR/AndroidRuntime(806): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 07-20 11:43:43.405: ERROR/AndroidRuntime(806): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 07-20 11:43:43.405: ERROR/AndroidRuntime(806): at dalvik.system.NativeStart.main(Native Method)
Mais REQUEST_CODE est souligné en rouge (Eclipse me propose de créer la variable) et GaTabAct aussi (Eclipse me propose de créer la classe ou la constante)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Intent intentScan = new Intent("com.gatab"); intentScan.addCategory(Intent.CATEGORY_DEFAULT); try { GaTabAct.startActivityForResult(intentScan, REQUEST_CODE); } catch (ActivityNotFoundException e) { Log.d("tag","activitynotfound"+e.toString()); }
Il est possible que j'ai mal compris comment appliquer ce code mais pourriez-vous m'expliquer? Merci!
Bonjour,
Voici la méthode que j'utilise pour lancer une Activity d'une application tierce :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Intent i = getPackageManager().getLaunchIntentForPackage(package_name); if (i != null) { startActivity(i); }
Génial c'est plus simple que ce que j'avais et ça marche =) Merci beaucoup!
Maintenant si l'application que je souhaite lancer posséde plusieurs activité est-il possible de choisir quelle activité de mon appli j'affiche?
L'appli que je souhaite lancer extends TabActivity :
Et dans l'appli qui va lancer celle ci-dessus j'ai créer 3 boutons selon celui que lequel je clique j'aimerais accéder à mon activité pont 1, pont 2 ou pont 3. Comment puis-je faire celà? pour l'instant je lance toujours le même pont soit celui que je choisi avec cette ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 public class GaTabAct extends TabActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TabHost tabHost = getTabHost(); TabHost.TabSpec spec; Intent intent; intent = new Intent().setClass(this, Pont6.class); spec = tabHost.newTabSpec("pont1").setIndicator(" Pont 1 ").setContent(intent); tabHost.addTab(spec); intent = new Intent().setClass(this, Pont6.class); spec = tabHost.newTabSpec("pont2").setIndicator(" Pont 2 ").setContent(intent); tabHost.addTab(spec); intent = new Intent().setClass(this, Pont6.class); spec = tabHost.newTabSpec("pont3").setIndicator(" Pont 3 ").setContent(intent); tabHost.addTab(spec); tabHost.setCurrentTab(2); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part tabHost.setCurrentTab(2);
Dernière modification par Invité ; 20/07/2011 à 16h32.
Aprés quelques recherches je pense que ce que j'ai besoin d'utiliser c'est soit setComponent, soit setClass, soit setClassName. Mais je ne saisi pas trés bien les différences et les utilisations de ces trois méthodes:
si j'ai bien compris il vaut mieux laisser le système décider quelle activité lancer, mais si on veut la choisir il vaut passer par ça?public Intent setComponent (ComponentName component)
Since: API Level 1 (Usually optional) Explicitly set the component to handle the intent. If left with the default value of null, the system will determine the appropriate class to use based on the other fields (action, data, type, categories) in the Intent. If this class is defined, the specified class will always be used regardless of the other fields. You should only set this value when you know you absolutely want a specific class to be used; otherwise it is better to let the system find the appropriate class so that you will respect the installed applications and user preferences.
Parameters
component The name of the application component to handle the intent, or null to let the system find one for you.
J'ai donc essayé ceci :public Intent setClass (Context packageContext, Class<?> cls)
Since: API Level 1 Convenience for calling setComponent(ComponentName) with the name returned by a Class object.
Parameters
packageContext A Context of the application package implementing this class.
cls The class name to set, equivalent to setClassName(context, cls.getName()).
Returns
Returns the same Intent object, for chaining multiple calls into a single statement.
See Also
setComponent(ComponentName)
public Intent setClassName (Context packageContext, String className)
Since: API Level 1 Convenience for calling setComponent(ComponentName) with an explicit class name.
Parameters
packageContext A Context of the application package implementing this class.
className The name of a class inside of the application package that will be used as the component for this Intent.
Returns
Returns the same Intent object, for chaining multiple calls into a single statement.
Mais j'ai un force close avec les erreurs suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 pont1.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { Intent i = getPackageManager().getLaunchIntentForPackage("com.gatab"); //Intent i = new Intent(); i.setClassName("com.gatab", "pont6"); if (i != null) { startActivity(i); }
Pourtant je ne devrais pas avoir à déclarer cette activité dans mon manifest vu qu'elle n'appartient pas à cette application?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 07-21 08:02:38.124: ERROR/AndroidRuntime(345): FATAL EXCEPTION: main 07-21 08:02:38.124: ERROR/AndroidRuntime(345): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.gatab/pont6}; have you declared this activity in your AndroidManifest.xml? 07-21 08:02:38.124: ERROR/AndroidRuntime(345): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1404) 07-21 08:02:38.124: ERROR/AndroidRuntime(345): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378) 07-21 08:02:38.124: ERROR/AndroidRuntime(345): at android.app.Activity.startActivityForResult(Activity.java:2817) 07-21 08:02:38.124: ERROR/AndroidRuntime(345): at android.app.Activity.startActivity(Activity.java:2923) 07-21 08:02:38.124: ERROR/AndroidRuntime(345): at com.gaside.Gaside$1.onClick(Gaside.java:36) 07-21 08:02:38.124: ERROR/AndroidRuntime(345): at android.view.View.performClick(View.java:2408) 07-21 08:02:38.124: ERROR/AndroidRuntime(345): at android.view.View$PerformClick.run(View.java:8816) 07-21 08:02:38.124: ERROR/AndroidRuntime(345): at android.os.Handler.handleCallback(Handler.java:587) 07-21 08:02:38.124: ERROR/AndroidRuntime(345): at android.os.Handler.dispatchMessage(Handler.java:92) 07-21 08:02:38.124: ERROR/AndroidRuntime(345): at android.os.Looper.loop(Looper.java:123) 07-21 08:02:38.124: ERROR/AndroidRuntime(345): at android.app.ActivityThread.main(ActivityThread.java:4627) 07-21 08:02:38.124: ERROR/AndroidRuntime(345): at java.lang.reflect.Method.invokeNative(Native Method) 07-21 08:02:38.124: ERROR/AndroidRuntime(345): at java.lang.reflect.Method.invoke(Method.java:521) 07-21 08:02:38.124: ERROR/AndroidRuntime(345): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 07-21 08:02:38.124: ERROR/AndroidRuntime(345): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 07-21 08:02:38.124: ERROR/AndroidRuntime(345): at dalvik.system.NativeStart.main(Native Method)
Bonjour,
Un exemple
Après si tu veux lancer une autre activity, à toi de la définir dans ton application appelé comme une MAIN , EDIT , VIEW, .... et de l'appeler en conséquence dans l'application ou tu souhaite l'utiliser.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Intent intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(new ComponentName("tonpackageaddress","taMainActivity")); startActivity(intent);
http://developer.android.com/referen...nt/Intent.html
Avec le code que tu propose, que je mette le nom de mon activité principale ou une autre j'ai les même erreurs que j'ai mises dans mon précédent post :s
Bonjour,
l'activity que tu veux appeler est ce que son application qui la déclare est bien installé sur ton emulateur ou téléphone ?
Oui ... j'avais vérifié vu qu'il ne trouvait pas l'activité, j'ai testé directement sur l'android avec les deux applis installées et même problème.
Pourrais je voir le manifest qui contient l'activity que tu veux appeler, ainsi que la fonction d'appel .
Merci.
Alors le manifest de l'activité que le veux appeler est le suivant :
Et j'aimerais afficher (selon le bouton choisi) pont4, pont5 ou pont6 mais je ne lance que GaTabAct (qui lance pont4 car c'est une TabActivity)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.gatab" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/gaicon" android:label="@string/app_name"> <activity android:name=".GaTabAct" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar">> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="Pont4"></activity> <activity android:name="Pont5"></activity> <activity android:name="Pont6"></activity> </application> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8"></uses-sdk> </manifest>
Qu'est-ce que tu appelle la fonction d'appel? si c'est la fonction d'appel de mon activity dans ma TabActivity la voici :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 TabHost tabHost = getTabHost(); TabHost.TabSpec spec; Intent intent; intent = new Intent().setClass(this, Pont4.class); spec = tabHost.newTabSpec("pont4").setIndicator(" Pont 4 ").setContent(intent); tabHost.addTab(spec); intent = new Intent().setClass(this,Pont5.class); spec = tabHost.newTabSpec("pont5").setIndicator(" Pont 5 ").setContent(intent); tabHost.addTab(spec); intent = new Intent().setClass(this, Pont6.class); spec = tabHost.newTabSpec("pont6").setIndicator(" Pont 6 ").setContent(intent); tabHost.addTab(spec);
Essaye avec cela plutôt
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <activity android:name="Pont6"> <intent-filter> <action android:name="android.intent.action.VIEW" /> </intent-filter> </activity>
C'est cela que j'appelais la fonction d'appel (la fonction qui appelle ton activity) , désolé si je n'ai pas été clair.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setComponent(new ComponentName("com.gatab","Pont6")); startActivity(intent);
Non non c'est bon c'est moi qui n'était pas sure.
Sinon cette solution ne résouds pas le problème non plus :s toujours cette erreur---EDIT---
Code : Sélectionner tout - Visualiser dans une fenêtre à part 07-21 11:46:19.355: ERROR/AndroidRuntime(802): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.gatab/pont4}; have you declared this activity in your AndroidManifest.xml?
Mais je n'utilise pas d'URI pour lancer mon appli? et je ne chercher pas a visualiser un élèment, juste à lancer mon appli, tu est sure qu'il faut utilisé ACTION_VIEW?ACTION_VIEW : Permet de visualiser l'élément identifié par l'uri (voir ci-dessous pour une
explication sur l'uri). C'est largement l'action la plus utilisée.
Dernière modification par Invité ; 21/07/2011 à 14h37.
Et dans ton manifest :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(getApplicationContext(),Pont4.class); startActivity(intent); }
Par contre je ne sais pas si on peu changer d'activity en passant d'onglet à onglet (comme il me semble que ton sujet d'origine portais sur sa).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3<activity android:name="Pont4"</activity> </application> </manifest>
Ce que tu proposes fonctionne si les deux activités sont dans la même appli non? parce que ma seconde appli ne connait pas pont4.class, je ne peux donc pas mettre celà comme tu proposes.
Oui c'est ce que je veux, mais changer d'activité selon les onglets ça fonctionne dans ma 1ére appli, mais accéder aux différents onglets (donc activité) depuis ma seconde appli ... c'est là qu'est le problème.Par contre je ne sais pas si on peu changer d'activity en passant d'onglet à onglet (comme il me semble que ton sujet d'origine portais sur sa).
Mais ce que tu demande il me semble que c'est impossible ?
Android fonctionne en mode SandBox , chaque application est isoler l'une de l'autre nativement, pour des soucis de sécurité.Après il y à peu être des parades..mais qui ne ce trouve pas dans les 31 use-permissions natives.
A ce que je viens de lire sur :
http://developer.android.com/guide/t.../security.html
Tu pourrais éventuellement ouvrir l'accès à ton application en lui ouvrant les droits selon sont certificats :
http://developer.android.com/guide/t...nt.html#plevel
Pour ensuite y accéder ... bon après ce n'est qu'une piste.
Cordialement ,
Je croyais que ce que je demandais était possible, si on peut accéder à l'activité principale d'une application depuis une autre, pourquoi on ne pourrait pas accéder aux autres activités?
Merci pour les liens je vais continuer à me renseigner un peu et si je vois que ça semble effectivement impossible .... tant pis je ne ferais pas ça.
Partager