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?
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ự là 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?
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
bạn có thể làm việc này và giải pháp là gì? Cảm ơn! – hopia
@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