2012-06-17 18 views
23

sto tentando di lanciare l'intenzione di aprire un collegamento al mercato Android.Nessuna attività trovata per gestire Intento

Android porzione manifesta assomiglia a questo:

<activity android:name="com.surreall.sixdice.Start" android:label="Six Dice" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation"> 
    <intent-filter> 
       <action android:name="android.intent.action.MAIN" />        
       <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
    <intent-filter> 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 

lanciare l'intento assomiglia:

public void onClick(View v) { 
     String PublisherID = "pub:surreallgames"; 
     Uri marketUri = Uri.parse("market://search?q="+PublisherID); 
     Intent marketIntent = new Intent(Intent.ACTION_VIEW, marketUri);      
     startActivity(marketIntent); 


       } 

logcat uscita:

06-17 17:38:47.393: E/AndroidRuntime(476): FATAL EXCEPTION: main 
06-17 17:38:47.393: E/AndroidRuntime(476): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=market://search?q=pub:surreallgames } 
06-17 17:38:47.393: E/AndroidRuntime(476): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1409) 
06-17 17:38:47.393: E/AndroidRuntime(476): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379) 
06-17 17:38:47.393: E/AndroidRuntime(476): at android.app.Activity.startActivityForResult(Activity.java:2827) 
06-17 17:38:47.393: E/AndroidRuntime(476): at android.app.Activity.startActivity(Activity.java:2933) 
06-17 17:38:47.393: E/AndroidRuntime(476): at com.surreall.sixdice.Start$9.onClick(Start.java:265) 
06-17 17:38:47.393: E/AndroidRuntime(476): at android.view.View.performClick(View.java:2485) 
06-17 17:38:47.393: E/AndroidRuntime(476): at android.view.View$PerformClick.run(View.java:9080) 
06-17 17:38:47.393: E/AndroidRuntime(476): at android.os.Handler.handleCallback(Handler.java:587) 
06-17 17:38:47.393: E/AndroidRuntime(476): at android.os.Handler.dispatchMessage(Handler.java:92) 
06-17 17:38:47.393: E/AndroidRuntime(476): at android.os.Looper.loop(Looper.java:123) 
06-17 17:38:47.393: E/AndroidRuntime(476): at android.app.ActivityThread.main(ActivityThread.java:3683) 
06-17 17:38:47.393: E/AndroidRuntime(476): at java.lang.reflect.Method.invokeNative(Native Method) 
06-17 17:38:47.393: E/AndroidRuntime(476): at java.lang.reflect.Method.invoke(Method.java:507) 
06-17 17:38:47.393: E/AndroidRuntime(476): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
06-17 17:38:47.393: E/AndroidRuntime(476): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
06-17 17:38:47.393: E/AndroidRuntime(476): at dalvik.system.NativeStart.main(Native Method) 

risposta

70

Si esegue questo codice in un ambiente Android a cui manca il Google Play Store, come un emulatore, Kindle Fire, ecc.

Se si incontra questo su un emulatore, testare questo percorso del codice su un dispositivo che ha il Play Store.

Se ci si imbatte in qualche componente hardware privo del Play Store o se si prevede di distribuire l'app su dispositivi privi del Play Store, gestisci l'eccezione o utilizza PackageManager e resolveActivity() per determinare se il tuo Intent riuscirà prima di chiamare startActivity().

if(intent.resolveActivity(getPackageManager()) != null) 
    startActivityForResult(intent, 0); 
else 
    ... 
+1

shooootttt, sto cercando di aprire il mercato: // url da 2 giorni su emulatore perché non ha mercato :(PhoneGap 3.4 –

12

È possibile utilizzare il metodo Intent.createChooser() per avviare in modo sicuro l'intenzione. Se non esiste un'applicazione in grado di gestire il tuo intento, verrà visualizzata una finestra di dialogo che informa l'utente. Se tuttavia è installato Google Play Store, l'utente può scegliere di "aprire" l'intenzione in Play Store.

startActivity(Intent.createChooser(marketIntent, "dialogTitle")); 
+0

Questo funziona esattamente come lei ha detto che sarebbe, ma un avvertimento è il selettore sembra avere un corpo trasparente, quindi è molto difficile il messaggio quando non si ha un'app installata. – CodyEngel

4

Prova ad aggiungere

<category android:name="android.intent.category.DEFAULT" /> 

alla chiamata di attività.

4

Meglio soluzione sarebbe quella di provare ad aprire uri in Google Play, ma se non v'è alcuna applicazione (Nessuna attività da gestire questo intento) - si può solo cercare di aprire uri nel browser come in questo esempio:

public static void rateApp(Context context) { 
    try { 
     context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + context.getPackageName()))); 
    } catch (android.content.ActivityNotFoundException anfe) { 
     viewInBrowser(context, "https://play.google.com/store/apps/details?id=" + context.getPackageName()); 
    } 
} 

public static void viewInBrowser(Context context, String url) { 
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    if (null != intent.resolveActivity(context.getPackageManager())) { 
     context.startActivity(intent); 
    } 
} 
+0

Vuoi dire 'viewInBrowser' nella riga 5? –

+0

Sì, errore di battitura fisso. – localhost

0
private void OpenStoreIntent(){ 
     String url=""; 
     Intent storeintent=null; 
     try { 
      url = "market://details?id=com.myapp.packagename"; 
      storeintent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      storeintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
      context.startActivity(storeintent); 
     } catch (final Exception e) { 
      url = "https://play.google.com/store/apps/details?id=com.myapp.packagename"; 
      storeintent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      storeintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
      context.startActivity(storeintent); 
     } 

    } 
Problemi correlati