2013-03-19 32 views
9

Tôi có một url mà tôi ghi đè trong Ứng dụng Android của mình. Nhấp vào liên kết từ email đến liên kết đó sẽ bật lên hộp thoại Intent Chooser ("Hoàn thành việc này bằng cách sử dụng"). Tuy nhiên, nhấp vào cùng một liên kết (trong thẻ <a>) từ trong Chrome (trên Android 4) chuyển hướng tôi đến url đó và không cung cấp Intent Chooser.Ghi đè url trên Android không hoạt động trên chuyển hướng

Nếu tôi thay thế liên kết trong thẻ <a> bằng liên kết tới Cửa hàng Google Play (https://play.google.com) thì nhấp vào liên kết sẽ bật lại Intent Chooser.

Có điều gì đặc biệt với Cửa hàng Google Play và Chrome hay tôi đã làm điều gì đó sai cấu hình url của mình? Có điều gì tôi có thể làm trong html để thực hiện công việc này?

Đây là <intent-filter>

<activity 
    android:label="@string/app_name" 
    android: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="https" 
       android:host="www.example.com" 
      /> 
     <data android:scheme="http" 
       android:host="www.example.com" 
      /> 
    </intent-filter> 
</activity> 

(Chuyển hướng đến url cũng không bật lên hộp thoại Intent Chooser, nhưng tôi figured hoàn cảnh của tôi trên châm chọc hơn thể hiện vấn đề của tôi.)

Cũng đáng chú ý, tôi khá chắc chắn điều này là tất cả làm việc trong khi tên miền của tôi đã xuống. Ngay khi tên miền của tôi trực tuyến, điều này đã ngừng hoạt động. Đây có thể là một phần của trí tưởng tượng của tôi vì tôi không tập trung 100% vào vấn đề này vào thời điểm đó.

Có thể Chrome xử lý url của Cửa hàng Google Play đặc biệt, nếu không nó sẽ chờ phản hồi không phải 200 từ url trước khi mở Intent Chooser?

+0

Bạn đang chạy phiên bản Android nào? Tự hỏi nếu nó không liên quan đến lỗi này: https://code.google.com/p/chromium/issues/detail?id=113140 –

+0

Đó là một tìm kiếm tốt. Tôi đang chạy 4.2.2 Tôi cũng tìm thấy lỗi này có thể có liên quan: https://code.google.com/p/chromium/issues/detail?id=170925 nhưng mã của tôi phân tách từ một nơi dễ dàng kiểm tra vì Tôi phải lấy nó ra khỏi cửa. Tôi sẽ sớm thiết lập một bài kiểm tra. – xbakesx

+0

@AlexFlorescu nếu bạn viết một câu trả lời giải thích rằng đó là một trong những lỗi này (tôi cũng đã đăng một lỗi mới chưa bị đóng: https://code.google.com/p/chromium/issues/detail?id = 230104) Tôi sẽ đánh dấu câu trả lời của bạn đúng. – xbakesx

Trả lời

1

Rất có thể là lỗi thực sự/đã biết.

Người tôi đề nghị (nhưng mà bây giờ đóng cửa để nó dường như sẽ được cố định cho phiên bản bạn đang cố gắng với): https://code.google.com/p/chromium/issues/detail?id=113140

Tìm thấy/mở bởi @xbakesk: https://code.google.com/p/chromium/issues/detail?id=170925 https://code.google.com/p/chromium/issues/detail?id=230104

Nếu tìm thấy bất kỳ lỗi nào khác, hãy cho tôi biết trong phần nhận xét và tôi sẽ thêm hoặc chỉnh sửa câu trả lời của tôi trực tiếp. Nếu lỗi bị đóng, tôi cũng sẽ cố cập nhật câu trả lời.

0

Tôi không chắc chắn liệu bạn có thể thêm nhiều thành phần dữ liệu vào bộ lọc mục đích hay không. Tôi sẽ sử dụng hai bộ lọc ý định khác nhau cho các lược đồ khác nhau.

Nếu bạn có quyền kiểm soát url trên trang web, bạn có thể thay đổi http thành giao thức tùy chỉnh của riêng bạn để ứng dụng của bạn sẽ mở thay vì nhắc dọc theo trình duyệt web.

+1

Trên mỗi trang này: http://developer.android.com/guide/components/intents-filters.html bạn có thể có nhiều '', chúng chỉ được kết hợp, mặc dù tôi sẽ thừa nhận theo cách không được viết rất chi tiết. Điều đó không thay đổi bất cứ điều gì trong hành vi được mô tả. Đối với điểm thứ hai của bạn, trong trường hợp của tôi ghi đè http là yêu cầu. – xbakesx

2

Tôi đã giải quyết vấn đề này một chút và có thể dễ dàng hơn để chỉ cho bạn một phương thức hoạt động. Điều này làm việc trên một thiết bị với 2.3.4 và một thiết bị với 4.2.2, vì vậy tôi nghĩ rằng nó sẽ làm việc trên hầu hết các thiết bị.

Dưới đây là bộ lọc ý định của tôi từ file manifest:

<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="http" android:host="realsimpleapps.com" android:pathPrefix="/acv/" /> 
</intent-filter> 

Dưới đây là tập tin html của tôi:

<a href="http://realsimpleapps.com/acv/aThing">Click Me!</a> 

Và trong hoạt động chính của tôi, tôi sử dụng để lấy bất cứ điều gì tôi có "aThing" (ở trên) được đặt thành:

Uri data = getIntent().getData(); 
if (data != null) { 
    List<String> params = data.getPathSegments(); 
    if (params != null) { 
     Log.d(tag, "Param 0: " + params.get(0)); 
    } 
} 

Làm việc đó, sau đó thêm phần tử dữ liệu thứ hai vào bộ lọc ý định. Nếu nó vẫn hoạt động sau đó, bạn nên được thiết lập.

Hãy cho chúng tôi biết cách thực hiện.

db

+0

Tôi kéo nó xuống chỉ một phần tử '' và tôi có chính xác tình huống tương tự. Nhấp vào một liên kết (bên ngoài Chrome) có hộp thoại Intent Chooser bật mở cung cấp ứng dụng của tôi dưới dạng độ phân giải cho mục đích. Nếu tôi nhấp vào liên kết từ trong Chrome, không bao giờ có hộp thoại Trình chọn nội dung, Chrome chỉ xử lý url. – xbakesx