2013-09-03 39 views
6

Tôi đang tìm cách tải URL hiện tại mà người dùng đang truy cập trên ứng dụng trình duyệt Android. tôi đã tìm ra rằng tôi có thể nhận được URL ghé thăm cuối cùng từ cơ sở dữ liệu Browser.BOOKMARKS_URI sử dụng kỹ thuật sau:Lấy URL hiện tại trong trình duyệt Android

Cursor cursor = context.getContentResolver().query(Browser.BOOKMARKS_URI, 
     Browser.HISTORY_PROJECTION, null, null, 
     Browser.BookmarkColumns.DATE + " DESC"); 
cursor.moveToNext(); 
String url = cursor.getString(Browser.HISTORY_PROJECTION_URL_INDEX); 
cursor.close(); 

Vấn đề ở đây, là rằng db Browser.BOOKMARKS_URI không được cập nhật khi người dùng nhấn trở lại trật tự để điều hướng đến trang trước đó trong trình duyệt và truy vấn trả lại kết quả không chính xác.

Xem ví dụ sau:

  1. dùng điều hướng tới www.google.com ->lợi nhuận Query "www.google.com"
  2. dùng điều hướng tới www.imdb.com ->truy vấn trả về "www.imdb.com"
  3. dùng nhấn trở lại trở lại www.google.com ->truy vấn trả về "www.imdb.com" (!!)

Có ai có bất kỳ ý tưởng nào về cách trả về đúng url mà người dùng đang xem không?

+0

Các phân giải nội dung được làm việc như mong đợi: báo chí lại không tải lại trang www.google.com' ', nhưng đọc nó từ bộ nhớ cache. Tương tự xảy ra khi người dùng chuyển đổi tab: lịch sử hiển thị URL được tải mới nhất, không nhất thiết phải là URL được hiển thị. Bạn có thể theo dõi URL hiện tại trong một WebView được nhúng vào ứng dụng của bạn. –

+0

Tôi không làm việc với WebView được nhúng trong ứng dụng của mình. Tôi đang cố gắng tìm trang web hiện tại của ứng dụng trình duyệt Android. –

+0

Tôi nghĩ rằng đó là bên ngoài của một chức năng ứng dụng bình thường, thường bạn không thể truy cập dữ liệu ứng dụng khác trừ khi nó cung cấp nó bằng cách nào đó, nhận được lịch sử trình duyệt có vẻ là điều duy nhất bạn có thể làm. – Nanoc

Trả lời

0

Tôi nghĩ bạn đã không trải qua những điều sau đây. một lần thử nó! Bạn có thể truy cập lịch sử Duyệt web giống như cách bạn làm điều đó cho các Nhà cung cấp nội dung khác. Bên cạnh lịch sử duyệt web, bạn cũng có thể nhận danh sách Dấu trang.

Cursor webLinksCursor = getContentResolver().query(Browser.BOOKMARKS_URI, Browser.HISTORY_PROJECTION, null, null, Browser.BookmarkColumns.DATE + " DESC"); 
int row_count = webLinksCursor.getCount(); 

int title_column_index = webLinksCursor.getColumnIndexOrThrow(Browser.BookmarkColumns.TITLE); 
int url_column_index = webLinksCursor.getColumnIndexOrThrow(Browser.BookmarkColumns.URL); 

if ((title_column_index > -1) && (url_column_index > -1) && (row_count > 0)) 
{ 
    webLinksCursor.moveToFirst(); 
    while (webLinksCursor.isAfterLast() == false) 
    { 
     if (webLinksCursor.getInt(Browser.HISTORY_PROJECTION_BOOKMARK_INDEX) != 1) 
     { 
      if (!webLinksCursor.isNull(url_column_index)) 
      { 
       Log.i("History" , "Last page browsed " + webLinksCursor.getString(url_column_index)); 
       break; 
      } 
     } 
     webLinksCursor.moveToNext(); 
    }    
} 
webLinksCursor.close(); 

và bạn cần sự cho phép cũng

com.android.browser.permission.READ_HISTORY_BOOKMARKS 
+0

Về cơ bản bạn đang làm điều tương tự mà tôi làm, đó là đi qua cơ sở dữ liệu 'Browser.BOOKMARKS_URI'. Sự khác biệt duy nhất là tôi chỉ nhận được url mới nhất và bạn nhận được tất cả các url. Và như tôi đã viết trong câu hỏi của tôi, cơ sở dữ liệu 'Browser.BOOKMARKS_URI' không giữ url hiện tại sau khi người dùng nhấn lại. –

+0

Tôi có một ý tưởng, điều gì về điện thoại di động JQuery cho hoạt động này? –

+0

Điện thoại di động JQuery sẽ giúp tôi chỉ khi tôi viết ứng dụng trình duyệt của riêng mình, nhưng tôi đang cố gắng lấy url hiện tại từ trình duyệt android chrome gốc. –

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