2012-12-14 28 views
5

Tôi muốn tích hợp nút "Tặng qua Bitcoin" trong PreferenceScreen của ứng dụng Android.Xử lý các lược đồ URI không xác định trong Android (Ví dụ về Bitcoin)

Có một vài khách hàng Bitcoin cho Android chạy xung quanh và Bitcoin wiki định nghĩa một số URI scheme được cho là được sử dụng cho thanh toán BTC.

Tôi đã thử đoạn mã sau

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

withou một BTC cài đặt trên điện thoại. Tôi đã cố gắng để khởi động ý định với các URI sau đây: bitcoin:19iSEgNkJnEUtNDuuTkkZrU44PVKYMVfhz?amount=1 mong Android nói với tôi rằng không có trình xử lý được cài đặt.

Thay vào đó tôi có một ActivityNotFoundException

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

Câu hỏi của tôi là về việc xử lý đúng (đọc "thực hành tốt nhất") chương trình URI không biết đến thiết bị.

  • Làm cách nào để kiểm tra xem một chương trình URI nhất định có thể được xử lý ít nhất bởi một ứng dụng không? (nếu có, tôi cho rằng màn hình lựa chọn)
  • Với tham chiếu đến Bitcoin nhưng không tham chiếu đến bất kỳ khách hàng cụ thể nào, thì cần Ý định tốt nhất nào khi thanh toán qua Bitcoin? Làm thế nào để xử lý các trường hợp khi không có khách hàng BTC được cài đặt?

[Chỉnh sửa]: câu hỏi là sai bởi vì tôi đã sao lưu điện thoại của tôi và cho rằng ứng dụng Bitcoin Wallet đã được cài đặt khi không.

Trả lời

4

Làm cách nào để kiểm tra xem một lược đồ URI nhất định có thể được xử lý ít nhất bởi một ứng dụng không? (Nếu có nhiều, tôi cho rằng một màn hình lựa chọn)

Hoặc:

  • chỉ bắt ActivityNotFoundException, hoặc

  • sử dụng PackageManagerresolveActivity() hoặc queryIntentActivities() để xem nếu có bất cứ điều gì phù hợp với bạn Intent

Với tham chiếu đến Bitcoin nhưng không tham chiếu đến khách hàng cụ thể đó, mục đích tốt nhất nên là gì khi thanh toán qua Bitcoin?

Bạn sẽ phải hỏi tác giả của ứng dụng Bitcoin có câu hỏi hoặc khuyến khích họ áp dụng tiêu chuẩn Uri nếu họ chưa làm như vậy.

Theo tệp kê khai cho ứng dụng bạn liệt kê, Intent của bạn có vẻ như nó sẽ hoạt động. Ít nhất, bằng cách sử dụng AppXplore, tôi thấy hoạt động cho ACTION_VIEW cho các giá trị Uri với sơ đồ là bitcoin. Do đó, bạn có thể liên hệ với nhà phát triển ứng dụng này và xem liệu bạn có thể xác định chính xác nơi bạn đang đi sai với tích hợp của mình hay không.

Cách xử lý trường hợp khi không có máy khách BTC nào được cài đặt?

Đề nghị đưa người dùng đến Cửa hàng Play để cài đặt một số ứng dụng khách Bitcoin mà bạn thích, qua market:Uri.

+1

Cảm ơn! Hãy để chúng tôi bỏ qua phần "liên hệ với nhà phát triển" vì tôi đã nhầm lẫn :) và giả sử ví BTC đã được cài đặt trên điện thoại (thay vào đó nó chỉ chạy trên máy tính bảng của tôi). Sau khi cài đặt nó từ Market tôi đã mở nó thành công với lược đồ URI đó. Phần còn lại của câu trả lời của bạn phù hợp với câu hỏi của tôi và sẽ là giải pháp cho vấn đề của tôi –

+1

@djechelon: 'ActivityNotFoundException' là một' RuntimeException' chuẩn. Việc gói lệnh 'startActivity()' của bạn trong một khối 'try' /' catch' phù hợp sẽ hoạt động. http://stackoverflow.com/questions/8399065/how-to-handle-the-activitynotfoundexception – CommonsWare

Các vấn đề liên quan