2012-12-14 17 views
5

Bir Android uygulamasının PreferenceScreen uygulamasında "Bitcoin Bağışla" düğmesini tümleştirmek istiyorum.Android'de bilinmeyen URI şemalarını işleme (Bitcoin örneği)

Android'in çevresinde çalışan birkaç Bitcoin istemcisi var ve Bitcoin wiki, BTC ödemeleri için kullanılması gereken URI scheme'u tanımlar.

telefonda yüklü bir BTC ezelî aşağıdaki kodu

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

çalıştılar. Aşağıdaki URI ile niyetimi başlatmayı denedim: bitcoin:19iSEgNkJnEUtNDuuTkkZrU44PVKYMVfhz?amount=1 Android'in hiçbir işleyicinin yüklenmediğini söylemesi bekleniyor.

Onun yerine Sorum yaklaşık doğru işleyen bir ActivityNotFoundException

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

cihaza bilinmeyen URI şemaları ("en iyi uygulamalar" okuyun) aldık.

  • Belirli bir URI şemasının en az bir uygulama tarafından ele alınabileceğini nasıl kontrol ederim? (daha fazla seçenek varsa, bir seçim ekranı varsayalım)
  • Bitcoin referansıyla, ancak herhangi bir müşteriye atıfta bulunulmadan, en iyi Bitcoin üzerinden ödeme yaparken nelere dikkat etmeli? BTC istemcisi kurulmadığında nasıl ele alınır?

[Düzenle]: telefon yedeklerimi bozduğumdan ve Bitcoin Cüzdan uygulamasının yüklenmediği varsayıldığından, sorunun nedeni yanlış.

cevap

4

Belirli bir URI şemasının en az bir uygulama tarafından ele alınabileceğini nasıl kontrol ederim?

  • Tıpkı eşleşen bir şey varsa görmek için ActivityNotFoundException veya

  • kullanımını PackageManager ve resolveActivity() veya queryIntentActivities() yakalamak:

Ya (daha, ben bir seçim ekranı varsayalım) Intent

Bitcoin referansıyla, ancak bu belirli müşteriye atıfta bulunmadan, Bitcoin üzerinden ödeme yaparken en iyi niyet ne olmalıdır? Sen Bitcoin yazarlarını sormak gerekir

bu soruyu uygulamalar, ya da öylesine zaten yapmadıysanız, bir Uri standardını benimsemeye teşvik edin.

Listeye yaptığınız başvuruya göre, Intent çalışmanız gerektiği gibi görünüyor. En azından AppXplore kullanarak, Uri değerleri için bitcoin şemasına sahip ACTION_VIEW için bir etkinlik görüyorum. Bu nedenle, bu uygulamanın geliştiricisiyle iletişim kurmak ve entegrasyonunuzda yanlış gittiğiniz yeri belirleyip belirleyemeyeceğinizi öğrenmek isteyebilirsiniz.

BTC istemcisi kurulmadığında durumu nasıl ele alırım?

Teklif bir market:Uri aracılığıyla, sizin gibi bazı Bitcoin müşteri yüklemek için Play Store'a kullanıcıyı çekmek için.

+1

Teşekkürler! Lütfen kafamı karıştırdığım için "geliştiriciyle iletişime geçin" bölümünü görmezden gelin ve BTC cüzdanının telefona yüklendiğini varsayalım (bunun yerine yalnızca tabletimde çalışır). Piyasadan yükledikten sonra bu URI şeması ile başarıyla açtım. Cevabınızın geri kalanı benim soruma uyuyor ve benim sorunumun çözümü olacak. –

+1

@djechelon: ActivityNotFoundException, bir 'RuntimeException' standardıdır. 'StartActivity()' çağrınızı uygun bir 'try' /' catch' bloğuna sarmak işe yaramalıdır. http://stackoverflow.com/questions/8399065/how-to-handle-the-activitynotfoundexception – CommonsWare