2010-08-25 37 views
7

Tôi biết điều này đã được hỏi nhiều lần trong StackOverflow rồi, nhưng tôi vẫn chưa tìm được giải pháp. Ứng dụng của tôi sẽ gửi một email có liên kết trong đó khi nhấp vào sẽ khởi chạy ứng dụng.Khởi chạy ứng dụng của tôi bằng URI mục đích

Theo @hackbod, cách tốt nhất để làm điều đó là sử dụng URI Intent (xem this). Dưới đây là mã của tôi mà bộ mục đích và đặt nó trong cơ thể email:

Intent customIntent = new Intent(CUSTOM_ACTION); 
customIntent.setPackage(MY_PACKAGE); 
customIntent.addCategory(MY_CAT_BROWSABLE); 
customIntent.addCategory(MY_CAT_DEFAULT); 

String customUri = customIntent.toUri(Intent.URI_INTENT_SCHEME); 

String emailBody = getString(R.string.intent_link, customUri); 

Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setType("text/html"); 
intent.putExtra(Intent.EXTRA_SUBJECT, "Recommending vid"); 
intent.putExtra(Intent.EXTRA_TEXT , Html.fromHtml(emailBody)); 
try { 
    startActivity(Intent.createChooser(intent, "Choose email client:")); 
} catch (android.content.ActivityNotFoundException ex) { 
    Toast.makeText(this, "There are no email clients installed.", Toast.LENGTH_SHORT).show(); 
} 

Đây là những gì tôi nhận được từ LogCat:

08-25 17:01:23.333: VERBOSE/Test URI(16987): intent:#Intent;action=com.test.project.action.VIEW_VID_FROM_LINK;category=android.intent.category.DEFAULT;category=android.intent.category.BROWSABLE;package=com.test.project;end 
08-25 17:01:23.338: VERBOSE/Test email text(16987): Hi,<br><br>Testing intents from an email.<br><br> A standard website: <a href=http://www.google.com>Go to Google</a>.<br><br> This link should launch the app: <a href=intent:#Intent;action=com.test.project.action.VIEW_VID_FROM_LINK;category=android.intent.category.DEFAULT;category=android.intent.category.BROWSABLE;package=com.test.project;end>Click link to launch</a>. 

Khi tôi xem các email từ điện thoại của tôi bằng cách sử dụng ứng dụng Gmail, Tôi có thể nhấp vào liên kết Google và nó khởi chạy trình duyệt, không có vấn đề với điều đó.

Nhưng liên kết cho mục đích thậm chí không thể nhấp được (Mặc dù từ bản nháp có vẻ như nó nên có thể nhấp được). Có ai đã thử điều này và làm cho nó hoạt động?

From draft: link looks clickableSent email: link not clickable

EDIT # 1: Tôi cũng đã cố gắng thiết lập các hành động để Intent.ACTION_VIEW nhưng liên kết vẫn là không nhấp được.

EDIT # 2: Rõ ràng, liên kết thực sự có thể nhấp. Tôi đã thử sử dụng một ứng dụng email khác và các liên kết có thể nhấp được! Có vẻ như có lỗi trong Gmail. Oh well. Nhưng rõ ràng, điều này khó hơn tôi tưởng. Tôi đã thử sử dụng:

Uri.Builder builder = new Uri.Builder(); 
builder.scheme("my.own.scheme"); 
builder.authority("my.authority"); 
Uri newUri = builder.build(); 
Intent customIntent = new Intent(CUSTOM_ACTION, newUri); 

Theo đề xuất của @CommonsWare, tôi đã thử kiểm tra xem có người nhận số này customIntent hay không. Rõ ràng có một, đó là những gì tôi đã mong đợi. Vì vậy, bước tiếp theo là biến ý định này thành URI mà tôi có thể sử dụng trong email. Tôi đã sử dụng:

String customUri = customIntent.toUri(Intent.URI_INTENT_SCHEME); 

đó, dựa trên sự hiểu biết của tôi về các tài liệu, nên cho tôi một cái gì đó giống như các liên kết http thông thường, chỉ có các chương trình thiết lập để intent. Sau đó tôi có thể sử dụng số này customUri làm giá trị cho các liên kết trong email. NHƯNG, có vẻ như đây không phải là trường hợp. Có ai có ví dụ về số .toUri phải trả lại không?

+0

Quá trình này diễn ra lâu, nhưng tôi nghĩ rằng tôi đã phát hiện sự cố. Đây là Intent Tôi muốn liên kết xuất hiện: 'Intent {act = com.test.project.action.CUSTOM_ACTION dat = com.test.project: //my.authority}'.Thay vào đó, tôi nhận được Intent này khi tôi nhấp vào liên kết trong email: 'Intent {act = android.intent.action.VIEW dat = intent: //my.authority#Intent; scheme = com.test.project; = com.test.project.action.CUSTOM_ACTION; kết thúc (có phần bổ sung)} '. Dựa trên tài liệu Intent.parseUri (chuỗi uri, int flags), trình khách email giải thích URI của tôi là * NOT * được tạo bởi toUri(). Giả định của tôi có đúng không? – Zarah

+0

bạn có thể làm việc này và giải pháp là gì? Cảm ơn! – hopia

+0

@hopia Tôi đã không thử lại lần nữa trong một thời gian dài. Bạn có thể xem xét các nhận xét giữa tôi và CommonsWare bên dưới để xem xét các phát hiện của tôi trong quá trình điều tra. Bạn cũng có thể thử câu trả lời mới hơn bên dưới (chưa thử). :) – Zarah

Trả lời

4

Bạn có thể thử báo giá xung quanh URL của mình trong các phần tử <a>, vì đó là cách viết HTML.

Bạn cũng có thể thử xác nhận, thông qua parseUri(), PackageManagerqueryIntentActivities(), nếu URL được tạo của bạn giải quyết một cái gì đó - nếu không, sau đó có một vấn đề với URL.

Here is a sample project hiển thị việc sử dụng URI_INTENT_SCHEME, trong trường hợp nó cung cấp cho bạn bất kỳ ý tưởng nào.

+0

(whooops, có sự cố với định dạng ở đó). Sẽ kiểm tra liên kết của bạn cho trình xử lý URL, cảm ơn! Nhưng tôi nghĩ rằng tôi sẽ đối mặt với rào cản đó một khi tôi nhận được liên kết có thể nhấp được. Cũng sẽ thử xác thực URL, sẽ cho bạn biết. :) Cảm ơn như mọi khi! :) – Zarah

+0

@Zarah: Quan điểm của tôi là liên kết có thể không nhấp được nếu Android không thể tìm thấy bất kỳ thứ gì để xử lý nhấp chuột. – CommonsWare

3

Sử dụng cờ 0 để tạo URI bằng lược đồ tùy chỉnh của bạn. Intent.URI_INTENT_SCHEME lực lượng cờ "ý định:" chương trình (và cú pháp điên URI ý định tổng thể) được sử dụng.

String customUri = customIntent.toUri(0); 
Các vấn đề liên quan