Manejo de esquemas de URI desconocidos en Android (ejemplo de Bitcoin)

Me gustaría integrar un botón "Donate via Bitcoin" en la aplicación PreferenceScreen de una aplicación de Android.

Hay algunos clientes de Bitcoin para Android funcionando alrededor, y Bitcoin wiki define un esquema URI que se supone que se utiliza para los pagos de BTC.

He intentado el siguiente código

findPreference(getString(R.string.preference_donateBitcoin)).setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { String url = getString(R.string.pref_donateBitcoin_uri); Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); return false; } }); 

Con un BTC instalado en el teléfono. He intentado lanzar la intención con el siguiente URI: bitcoin:19iSEgNkJnEUtNDuuTkkZrU44PVKYMVfhz?amount=1 esperando Android diciéndome que no se ha instalado ningún controlador.

En su lugar, obtuve una ActivityNotFoundException

 android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=bitcoin:19iSEgNkJnEUtNDuuTkkZrU44PVKYMVfhz?amount=1 } 

Mi pregunta es acerca de manejar correctamente (leer "mejores prácticas") URI esquemas desconocidos para el dispositivo.

  • ¿Cómo puedo comprobar que un cierto esquema URI puede ser manejado al menos por una aplicación? (Si más, supongo que una pantalla de elección)
  • Con referencia a Bitcoin pero sin referencia a ningún cliente específico, ¿cuál debería ser el mejor intento al pagar a través de Bitcoin? ¿Cómo manejar el caso cuando no se instala un cliente BTC?

[Editar]: la pregunta es incorrecta porque he estropeado las copias de seguridad de mi teléfono y presume que la aplicación Bitcoin Wallet se instaló cuando no estaba.

¿Cómo puedo comprobar que un cierto esquema URI puede ser manejado al menos por una aplicación? (Si más, supongo que una pantalla de elección)

Ya sea:

  • Sólo captura el ActivityNotFoundException , o

  • resolveActivity() PackageManager y resolveActivity() o queryIntentActivities() para ver si hay algo que coincida con su Intent

Con referencia a Bitcoin pero sin referencia a ese cliente específico, ¿cuál debería ser la mejor intención al pagar a través de Bitcoin?

Usted tendría que pedir a los autores de las aplicaciones de Bitcoin que cuestionen, o animarlos a adoptar un estándar de Uri , si no lo han hecho ya.

De acuerdo con el manifiesto de la aplicación que usted lista, su Intent parece que debería funcionar. Al menos, usando AppXplore , veo una actividad para ACTION_VIEW para valores de Uri con un esquema de bitcoin . Por lo tanto, es posible que desee ponerse en contacto con el desarrollador de esta aplicación y ver si puede determinar con precisión dónde va mal con su integración.

¿Cómo manejar el caso cuando no se instala un cliente BTC?

Ofrezca llevar al usuario a Play Store para instalar algún cliente de Bitcoin que desee, a través de un market: Uri .

  • Intención de vídeo no guardar vídeo en la ubicación deseada
  • Android google play juegos seleccionar actividad para iniciar cuando se hace clic en la notificación
  • El diálogo de selección de intenciones muestra el nombre del paquete además de la etiqueta Actividad
  • Desplaza las pantallas de una actividad a otra en android
  • Android lee la intención del correo
  • Dos lanzadores para una sola actividad
  • SMS enviados / entregados: ¿cómo identificas a qué SMS pertenece la emisión?
  • Prácticas recomendadas: agregar tu aplicación al menú de recursos compartidos de Android
  • Relación de Intención y Bundle
  • Fragmento de la prensa de OnBack que muestra la pantalla en blanco
  • ¿Cómo borrar los datos de intención en Actividad después de abrirlos desde url?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.