Tôi không biết liệu có nhiều người đã thử cách này hay không nhưng tôi đang cố gắng xây dựng một ứng dụng yêu cầu người dùng nhấn vào liên kết trên sms anh/cô ấy nhận và điều này sẽ khởi chạy ứng dụng android. Có thể làm trong android? Nếu có, làm thế nào tôi có thể làm điều này? Tôi biết điều này có thể được thực hiện trong IOS. Bất kỳ đề xuất hoặc trợ giúp sẽ được đánh giá cao. Cảm ơn bạn.Khởi chạy ứng dụng android khi liên kết được nhấn vào SMS
Trả lời
Trong bạn Manifest, dưới một hoạt động mà bạn muốn xử lý dữ liệu đến từ một liên kết nhấp trong ứng dụng nhắn tin, xác định một cái gì đó như thế này:
<activity android:name=".SomeActivityName" >
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.VIEW" />
<data android:scheme="com.your_package.something" />
</intent-filter>
</activity>
Các android:scheme=""
đây là những gì sẽ đảm bảo rằng các hoạt động sẽ phản ứng với bất kỳ dữ liệu với điều này trong đó:
<data android:scheme="com.your_package.something" />
trong SomeActivityName
, bạn có thể chạy một che (Tên sử dụng như một minh hoạ cách tự nhiên, bạn sẽ sử dụng :-) riêng bạn.) ck như thế này:
Uri data = getIntent().getData();
String strData = data.toString();
if (strScreenName.equals("com.your_package.something://")) {
// THIS IS OPTIONAL IN CASE YOU NEED TO VERIFY. THE ACTUAL USAGE IN MY APP IS BELOW THIS BLOCK
}
sử dụng tương tự như ứng dụng của tôi:
Uri data = getIntent().getData();
strScreenName = data.toString()
.replaceAll("com.some_thing.profile://", "")
.replaceAll("@", "");
Tôi sử dụng này để xử lý nhấp chuột trên twitter @username liên kết trong ứng dụng của tôi. Tôi cần phải loại bỏ các số com.some_thing.profile://
và @
để lấy tên người dùng để xử lý thêm. Mã Manifest, giống hệt nhau (chỉ với name
và scheme
đã thay đổi).
Thêm intent-filter vào ứng dụng của bạn để nghe các liên kết tuân theo định dạng bạn muốn ứng dụng của mình được khởi chạy.
Tuy nhiên, đây sẽ là người nghe toàn cầu và mọi liên kết phù hợp với định dạng ngay cả bên ngoài ứng dụng SMS sẽ kích hoạt ứng dụng của bạn. Vì vậy, nếu người dùng nhấn vào một liên kết tương tự trong trình duyệt web, ứng dụng của bạn sẽ cố gắng trả lời nó.
Ngoài ra, nếu có ứng dụng khác ngoài ứng dụng của bạn có thể xử lý liên kết này, Android sẽ tạo trình chọn cho phép người dùng chọn bất kỳ ứng dụng nào họ muốn sử dụng. Không có gì bạn có thể làm về điều này, ngoại trừ đề nghị người dùng biến ứng dụng của bạn thành trình xử lý mặc định cho các liên kết đó.
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE"
<data android:scheme="https" android:host="${hostName}" android:pathPattern="/.*" />
</intent-filter>
Câu trả lời trước là OK nhưng đừng quên chỉ định mẫu.
Cũng xác định tên máy của bạn bên trong Gradle nộp như:
android {
defaultConfig {
manifestPlaceholders = [hostName:"subdomain.example.com"]
}
}
Thông tin thêm về manifestPlaceholders
here.
ok khi tôi nhận được một thông báo (ví dụ: myapp: // lấy/256298xxxx) Nó được cho là để làm nổi bật phần myapp: // get/256298xxxx trên văn bản. Nhưng nó không. Tôi nên giải quyết vấn đề này như thế nào? Ứng dụng sẽ được khởi chạy như thế nào khi phần myapp: // get/256298xxxx thậm chí không tự đánh dấu bằng liên kết để nhấn trong văn bản – nishantvodoo
@nishan_vodoo: Đó là vì _myapp: // get/256298xxxx_ không phải là URL hợp lệ cho ứng dụng SMS để phân tích cú pháp và hiển thị nó dưới dạng liên kết. Tốt nhất, nó sẽ phân tích chuỗi số như một số điện thoại. Bạn sẽ phải gửi một URL hợp lệ trong SMS. Hãy xem một ví dụ cụ thể: http://stackoverflow.com/a/3865145/450534. –
Cảm ơn các bạn đã dành thời gian để trả lời câu hỏi của tôi. – nishantvodoo