Ai đó có thể vui lòng hướng dẫn tôi về cách khởi chạy ứng dụng Android của tôi từ trình duyệt Android không?
Ai đó có thể vui lòng hướng dẫn tôi về cách khởi chạy ứng dụng Android của tôi từ trình duyệt Android không?
Câu trả lời:
Sử dụng một <intent-filter>
với một <data>
yếu tố. Ví dụ: để xử lý tất cả các liên kết đến twitter.com, bạn sẽ đặt liên kết này vào <activity>
trong AndroidManifest.xml
:
<intent-filter>
<data android:scheme="http" android:host="twitter.com"/>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
Sau đó, khi người dùng nhấp vào liên kết tới twitter trong trình duyệt, họ sẽ được hỏi nên sử dụng ứng dụng nào để hoàn thành hành động: trình duyệt hoặc ứng dụng của bạn.
Tất nhiên, nếu bạn muốn cung cấp tích hợp chặt chẽ giữa trang web và ứng dụng của mình, bạn có thể xác định sơ đồ của riêng mình:
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
Sau đó, trong ứng dụng web của bạn, bạn có thể đặt các liên kết như:
<a href="my.special.scheme://other/parameters/here">
Và khi người dùng nhấp vào nó, ứng dụng của bạn sẽ được khởi chạy tự động (bởi vì nó có thể sẽ là ứng dụng duy nhất có thể xử lý my.special.scheme://
loại uris). Nhược điểm duy nhất của việc này là nếu người dùng không cài đặt ứng dụng, họ sẽ gặp phải một lỗi khó chịu. Và tôi không chắc có cách nào để kiểm tra.
Chỉnh sửa: Để trả lời câu hỏi của bạn, bạn có thể sử dụng getIntent().getData()
trả về một Uri
đối tượng. Sau đó, bạn có thể sử dụng Uri.*
các phương pháp để trích xuất dữ liệu bạn cần. Ví dụ: giả sử người dùng nhấp vào liên kết đến http://twitter.com/status/1234
:
Uri data = getIntent().getData();
String scheme = data.getScheme(); // "http"
String host = data.getHost(); // "twitter.com"
List<String> params = data.getPathSegments();
String first = params.get(0); // "status"
String second = params.get(1); // "1234"
Bạn có thể làm những điều trên ở bất cứ đâu trong bạn Activity
, nhưng có lẽ bạn sẽ muốn làm điều đó onCreate()
. Bạn cũng có thể sử dụng params.size()
để lấy số lượng các đoạn đường dẫn trong Uri
. Hãy tìm đến javadoc hoặc trang web của nhà phát triển Android để biết các Uri
phương pháp khác mà bạn có thể sử dụng để trích xuất các phần cụ thể.
android:exported="true"
vào bảng Activity
kê khai của họ . Kiểm tra câu trả lời này stackoverflow.com/a/13044911/1276636
Tất cả các câu trả lời trên không hoạt động với tôi CHROME
vào ngày 28 tháng 1 năm 2014
Ứng dụng của tôi đã khởi chạy đúng cách từ http://example.com/someresource/ các liên kết từ các ứng dụng như hangouts, gmail, v.v. nhưng không phải từ trong trình duyệt chrome.
để giải quyết vấn đề này, để nó khởi chạy đúng từ CHROME, bạn phải đặt bộ lọc ý định như thế này
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="example.com"
android:pathPrefix="/someresource/"
android:scheme="http" />
<data
android:host="www.example.com"
android:pathPrefix="/someresource/"
android:scheme="http" />
</intent-filter>
lưu ý các pathPrefix
yếu tố
ứng dụng của bạn bây giờ sẽ xuất hiện bên trong bộ chọn hoạt động bất cứ khi nào người dùng yêu cầu http://example.com/someresource/ mẫu từ trình duyệt chrome bằng cách nhấp vào liên kết từ kết quả tìm kiếm của google hoặc bất kỳ trang web nào khác
Vui lòng xem nhận xét của tôi ở đây: Tạo liên kết trong trình duyệt Android khởi động ứng dụng của tôi?
Chúng tôi đặc biệt không khuyến khích mọi người sử dụng các chương trình của riêng họ, trừ khi họ đang xác định một chương trình internet mới trên toàn thế giới.
Trong trường hợp của tôi, tôi đã phải đặt hai loại cho <intent-filter>
và sau đó nó hoạt động:
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
Ví dụ: Bạn có những thứ tiếp theo:
Liên kết để mở ứng dụng của bạn: http://example.com
Tên gói của ứng dụng của bạn: com.example.mypackage
Sau đó, bạn cần làm tiếp theo:
1) Thêm bộ lọc ý định vào Hoạt động của bạn (Có thể là bất kỳ hoạt động nào bạn muốn. Để biết thêm thông tin, hãy kiểm tra tài liệu ).
<activity
android:name=".MainActivity">
<intent-filter android:label="@string/filter_title_view_app_from_web">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://example.com" -->
<data
android:host="example.com"
android:scheme="http" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
2) Tạo tệp HTML để kiểm tra liên kết hoặc sử dụng phương pháp này.
<a href="intent://example.com#Intent;scheme=http;package=com.example.mypackage;end">Open your Activity directly (just open your Activity, without a choosing dialog). </a>
<a href="http://example.com">Open this link with browser or your programm (by choosing dialog).</a>
3) Sử dụng Chrome di động để kiểm tra
4) Đó là nó.
Và không cần thiết phải xuất bản ứng dụng trên thị trường để kiểm tra liên kết sâu =)
Ngoài ra, để biết thêm thông tin, kiểm tra tài liệu và trình bày hữu ích .
Cũng cần được <category android:name="android.intent.category.BROWSABLE"/>
thêm vào bộ lọc ý định để làm cho hoạt động được nhận dạng đúng từ liên kết.
Liên kết sau cung cấp thông tin về việc khởi chạy ứng dụng (nếu được cài đặt) trực tiếp từ trình duyệt. Nếu không, nó trực tiếp mở ứng dụng trong cửa hàng play để người dùng có thể tải xuống liền mạch.
Xin lưu ý nếu biểu tượng của bạn biến mất khỏi trình khởi chạy Android khi bạn triển khai tính năng này, hơn là bạn phải phân tách bộ lọc ý định.
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="your-own-uri" />
</intent-filter>
</activity>
Vâng, Chrome tìm kiếm thay vì tìm kiếm chương trình. Nếu bạn muốn khởi chạy Ứng dụng của mình thông qua sơ đồ URI, hãy sử dụng Ứng dụng tiện ích tuyệt vời này trên cửa hàng Play. Nó đã cứu ngày của tôi :) https://play.google.com/store/apps/details?id=com.naosim.urlschemeender
Cảng Xamarin của câu trả lời của Felix
Trong của bạn MainActivity
, hãy thêm cái này ( docs: Android.App.IntentFilterAttribution Class ):
....
[IntentFilter(new[] {
Intent.ActionView },
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
DataScheme = "my.special.scheme")
]
public class MainActivity : Activity
{
....
Xamarin sẽ thêm sau đây AndroidManifest.xml
cho bạn:
<activity
android:label="Something"
android:screenOrientation="portrait"
android:theme="@style/MyTheme"
android:name="blah.MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="my.special.scheme" />
</intent-filter>
</activity>
Và để có được thông số ( tôi đã thử nghiệm trong OnCreate of MainActivity ):
var data = Intent.Data;
if (data != null)
{
var scheme = data.Scheme;
var host = data.Host;
var args = data.PathSegments;
if (args.Count > 0)
{
var first = args[0];
var second = args[1];
...
}
}
Theo tôi biết, ở trên có thể được thêm vào trong bất kỳ hoạt động nào, không chỉ MainActivity
Ghi chú:
OnCreate
sự kiện của ứng dụng MainLauncher Activity
sẽ được kích hoạt lại.<a href="my.special.scheme://host/arg1/arg2">
, ở trên, các giá trị đoạn mã cuối cùng sẽ là:scheme: my.special.scheme
host: host
args: ["arg1", "arg2"]
first: arg1
second: arg2
Cập nhật: nếu Android tạo phiên bản mới của ứng dụng của bạn, bạn cũng nên thêm android:launchMode="singleTask"
.
Cách tiếp cận của Felix để xử lý các liên kết sâu là cách tiếp cận điển hình để xử lý các liên kết sâu. Tôi cũng sẽ đề nghị kiểm tra thư viện này để xử lý việc định tuyến và phân tích cú pháp các liên kết sâu của bạn:
https://github.com/airbnb/DeepLinkDispatch
Bạn có thể sử dụng các chú thích để đăng ký Hoạt động của mình cho một URI liên kết sâu cụ thể và nó sẽ trích xuất các tham số cho bạn mà không cần phải thực hiện các quy tắc thông thường để nhận các phân đoạn đường dẫn, khớp với nó, v.v. Bạn có thể chỉ cần chú thích và hoạt động như thế này :
@DeepLink("somePath/{someParameter1}/{someParameter2}")
public class MainActivity extends Activity {
...
}
Này, tôi đã có giải pháp. Tôi không đặt danh mục là "Mặc định". Ngoài ra tôi đã sử dụng hoạt động chính cho mục đích Dữ liệu. Bây giờ tôi đang sử dụng một hoạt động khác nhau cho dữ liệu mục đích. Cảm ơn đã giúp đỡ. :)
Bạn cần thêm tên máy chủ giả vào ứng dụng CALLBACK_URL ': //' không có ý nghĩa như một URL và không thể được phân tích cú pháp.
ví dụ.php:
<?php
if(!isset($_GET['app_link'])){ ?>
<iframe src="example.php?app_link=YourApp://blabla" style="display:none;" scrolling="no" frameborder="0"></iframe>
<iframe src="example.php?full_link=http://play.google.com/xyz" style="display:none;" scrolling="no" frameborder="0"></iframe>
<?php
}
else { ?>
<script type="text/javascript">
self.window.location = '<?php echo $_GET['app_link'];?>';
window.parent.location.href = '<?php echo $_GET['full_link'];?>';
</script>
<?php
}
Hãy xem @JRun trả lời ở đây . Ý tưởng là tạo html với lược đồ tùy chỉnh của bạn và tải nó lên đâu đó. Sau đó, nếu bạn nhấp vào liên kết tùy chỉnh trên tệp html của mình, bạn sẽ được chuyển hướng đến ứng dụng của mình. Tôi đã từng này bài viết cho Android. Nhưng đừng quên đặt Name = "MyApp.Mobile.Droid.MainActivity"
thuộc tính tên đầy đủ cho hoạt động mục tiêu của bạn.
Kể từ ngày 15/06/2019
những gì tôi đã làm là bao gồm tất cả bốn khả năng để mở url.
tức là, với http
/ https
và 2 có www
tiền tố và 2 không có tiền tốwww
và bằng cách sử dụng ứng dụng này, ứng dụng của tôi sẽ tự động khởi chạy ngay bây giờ mà không yêu cầu tôi chọn trình duyệt và tùy chọn khác.
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="example.in" />
<data android:scheme="https" android:host="www.example.in" />
<data android:scheme="http" android:host="example.in" />
<data android:scheme="http" android:host="www.example.in" />
</intent-filter>