2010-06-14 38 views
5

Tôi đã đọc về các ý định trong Android nhưng ở đây có câu hỏi của tôi. Tôi muốn khởi chạy một ứng dụng trên điện thoại Android của mình bằng cách nhấp vào liên kết trong trình duyệt web. Ví dụ: Nếu liên kết là "mycam: // http://camcorder.com", "mycam: //" hoạt động như một loại "thẻ" để khởi chạy ứng dụng của tôi nhưng tôi muốn chuyển "http://camcorder.com" làm chuỗi cho ứng dụng đó trên khởi đầu.Khởi chạy ứng dụng với URL

Trợ giúp xin vui lòng!

Cảm ơn!

Trả lời

5

có một phương pháp trong mã nguồn ứng dụng Browser,:

public boolean shouldOverrideUrlLoading(WebView view, String url) { ... } 

Sau một url nhấp và nó chưa bắt đầu tải:

  1. chuyển đổi url để ý

    Intent intent; 
    
    // perform generic parsing of the URI to turn it into an Intent. 
    try { 
        intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME); 
    } catch (URISyntaxException ex) { 
        Log.w("Browser", "Bad URI " + url + ": " + ex.getMessage()); 
        return false; 
    } 
    
  2. nếu nó không bắt đầu bằng thị trường: // (hoặc một số lược đồ được xác định trước), hãy thử startActivityIfNeeded()

    intent.addCategory(Intent.CATEGORY_BROWSABLE); 
    intent.setComponent(null); 
    try { 
        if (startActivityIfNeeded(intent, -1)) { 
         return true; 
        } 
    } catch (ActivityNotFoundException ex) { 
        // ignore the error. If no application can handle the URL, 
        // eg about:blank, assume the browser can handle it. 
    } 
    

Đó là thông tin rất hữu ích! Tôi lại chơi tình hình trong một mã đơn giản:

Intent intent = Intent.parseUri("mycam://http://camcorder.com", Intent.URI_INTENT_SCHEME); 
intent.addCategory(Intent.CATEGORY_BROWSABLE); 
intent.setComponent(null); 
System.out.println(intent); 

Kết quả sẽ cung cấp manh mối cho tôi để viết một hoạt động với mục đích lọc:

 <activity android:name=".MyCamActivity" 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="mycam" /> 
      </intent-filter> 
     </activity> 

PS. đừng quên android.intent.category.DEFAUL.

Cuối cùng, hoạt động của bạn có thể gọi bằng mycam: // chương trình

+0

Vì vậy, tất cả những gì tôi phải làm là tạo bộ lọc ý định của mình? BTW, đây là liên kết thực tế mà tôi sẽ thực hiện các thử nghiệm với: http://gunitec.com.do/carlos-portes.html "Cam1" là liên kết thực tế mà tôi sẽ thử nghiệm. Tôi đã thử bộ lọc ý định và không có gì. –

+0

Tôi kiểm tra nó tốt. bạn có thể cung cấp tệp AndroidManifest.xml không? – qrtt1

+0

Ok, làm thế nào tôi có thể gửi cho bạn? Xin lỗi vì trả lời muộn, tôi không được thông báo rằng bạn đã viết lại. –

4

mycam: // http://camcorder.com không phải là một URI hợp lệ, và chiếm chương trình là loại đáng sợ nếu hai ứng dụng chọn một trong những giống nhau. Sẽ tốt hơn nếu bạn đăng ký hoạt động của mình với tư cách là người xử lý cho một URI cụ thể (ví dụ: http: //www.example.com/camcorder, thay thế miền riêng của bạn). Bạn làm điều đó với <data> tag in your <intent-filter> tag in the AndroidManifest.xml. Khi người dùng nhấp vào liên kết, họ sẽ được đưa đến ứng dụng của bạn. Bằng cách đó, bạn cũng có thể đặt một trang thực trên web, hướng dẫn mọi người cài đặt ứng dụng của bạn hoặc bất kỳ thứ gì.

+0

Ứng dụng tôi đang thực hiện được thực hiện cho các liên kết nội bộ cụ thể trên trang web, không phải cho tất cả các liên kết. Tại sao bạn nói nó không phải là một URI hợp lệ? –

Các vấn đề liên quan