2012-06-17 20 views
23

Estoy intentando lanzar un intento para abrir un enlace al mercado Android.No se ha encontrado ninguna actividad para manejar la intención

porción de manifiesto de Android se parece a esto:

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

lanzar la intención parece:

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

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) 

Respuesta

70

Está ejecutando este código en un entorno Android que carece de Google Play Store, como un emulador, Kindle Fire, etc.

Si encuentra esto en un emulador, pruebe esta ruta de código en un dispositivo que tenga Play Store.

Si se encuentra con un hardware que no tiene Play Store, o si planea distribuir su aplicación a dispositivos que carecen de Play Store, puede manejar la excepción o usar PackageManager y resolveActivity() para determinar si su Intent tendrá éxito antes de llamar al startActivity().

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

shooootttt, estoy intentando abrir mercado: // url desde 2 días en emulador, ya que no tiene mercado :(Phonegap 3.4 –

12

Puede utilizar el método Intent.createChooser() para ejecutar Intent de forma segura. Si no existe una aplicación que pueda manejar su intención, se mostrará un cuadro de diálogo que le indicará al usuario exactamente eso. Sin embargo, si se instala Google Play Store, el usuario puede elegir "abrir" la intención en Play Store.

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

Esto funciona exactamente igual que dijo que lo haría, pero una advertencia es el selector parece tener un cuerpo transparente por lo que es muy difícil forzar el mensaje cuando no tienes una aplicación instalada. – CodyEngel

4

Trate de añadir

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

a la actividad de llamadas.

4

mejor solución sería la de tratar de abrir uri en Google Play, pero si no hay tal aplicación (sin actividad de manejar esta intención) - sólo puede tratar de abrir uri en el navegador como en este ejemplo:

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

¿Quieres decir 'viewInBrowser' en la línea 5? –

+0

Sí, se corrigió un error tipográfico. – 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); 
     } 

    } 
Cuestiones relacionadas