2012-01-05 39 views
10

Tôi đã thực hiện các hướng dẫn trên Android và đã thử ví dụ WebView. Đây là những gì tôi đã kết thúc với:WebView có cần một WebViewClient để hoạt động không?

WebAppActivity

public class WebAppActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     WebView wv = (WebView) findViewById(R.id.webView1); 
     wv.loadUrl("http://www.google.com"); 

    } 
} 

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <WebView 
     android:id="@+id/webView1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 
    </WebView> 

</LinearLayout> 

Nhưng thay vì tải trang trong bản thân ứng dụng, ngay sau khi ứng dụng khởi động trình duyệt android mặc định sẽ mở ra và trang tải trong trình duyệt thay vì ứng dụng. Khi tôi nhấn trở lại, tôi quay lại hoạt động ứng dụng hiển thị màn hình trống.

Có ai biết tại sao điều này xảy ra không?

Edit:

manifest

<uses-sdk android:minSdkVersion="7" /> 
<uses-permission android:name="android.permission.INTERNET"/> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:label="@string/app_name" 
     android:name=".WebAppActivity" > 
     <intent-filter > 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

Đây là chỉ để chứng minh rằng tôi đã thêm sự cho phép INTERNET

Edit:

Ngay sau khi tôi thêm WebViewClient,

tải trang trong ứng dụng. Đây có phải là hành vi mong đợi không? WebView của Android có yêu cầu một WebViewClient không? (không thể tìm thấy bất kỳ tài liệu về nó)

Edit:

tôi nhận thấy rằng vấn đề này xảy ra khi tôi cài đặt các gói ứng dụng trong một mô phỏng trong đó có các API của Google. Trên một trình mô phỏng bình thường (không có API của Google), nó hoạt động như mong đợi.

+1

câu hỏi của bạn đã được trả lời: http://stackoverflow.com/questions/2378800/android-webview-click-opens-default-browser – ariefbayu

+0

@silent Vui lòng đọc kỹ. Đó không phải là câu hỏi của tôi. Tôi gặp sự cố khi tải trang đầu tiên, thứ tải trong trình duyệt thay vì ứng dụng. Xem nhận xét của Flo –

+1

Không, tôi không nghĩ rằng anh ấy đang nói về các liên kết trong trang web mà đã được nhấp vào. Điều này nghe có vẻ như trang web không bao giờ được tải trong WebView cả. – Flo

Trả lời

3

Vâng, bạn phải thiết lập một WebViewClient mà trả về true vào phương pháp 'shouldOverrideUrlLoading' overrided để webview bạn tải các url trong ứng dụng của bạn.

Hãy cho tôi biết nếu bạn muốn có ví dụ.


Sửa

@Aki WebViewClient.shouldOverrideUrlLoading Documentation

Đưa ứng dụng máy chủ một cơ hội để tiếp nhận sự kiểm soát khi một url mới sắp được nạp trong WebView hiện hành. Nếu WebViewClient không được cung cấp, theo mặc định, WebView sẽ yêu cầu Trình quản lý hoạt động chọn trình xử lý thích hợp cho url.Nếu WebViewClient được cung cấp, trả về true có nghĩa là ứng dụng máy chủ xử lý url, trong khi trả về false có nghĩa là WebView hiện tại xử lý url.

+0

@Christopher Tại sao nó mà chúng ta cần một webViewClient chỉ trong trường hợp của các thiết bị với google apis. Hơn nữa, bạn có thể chỉ cho tôi một số tài liệu chính thức của Android nêu rõ thực tế này không? –

+0

@Aki chỉnh sửa câu trả lời – ChristopheCVB

+0

Cảm ơn Christopher.Nhưng nó không nói bất cứ nơi nào 'shouldOverrideUrlLoading' được gọi khi chúng ta gọi phương thức' loadUrl'. –

0
private WebView webVenue; 
private WebSettings websettings; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 

     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.schedule_time); 

     webVenue = (WebView)findViewById(R.id.webview_schedule_time); 
     txtEmptyMsg = (TextView)findViewById(R.id.txtEmptyMsg); 

     mContext = this;   
     webVenue.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
     webVenue.getSettings().setJavaScriptEnabled(true); 
     websettings=webVenue.getSettings(); 
     webVenue.setScrollBarStyle(ScrollView.SCROLLBARS_OUTSIDE_OVERLAY); 
     webVenue.loadUrl(URL); 
} 
} 

Tất cả The Best ...

+0

Cảm ơn bạn đã trả lời. Tôi ** biết ** các cách khác để làm cho nó hoạt động. Ví dụ, thêm một 'WebViewClient' làm cho nó hoạt động. Bắt nó để làm việc không phải là mối quan tâm của tôi. Tìm hiểu lý do tại sao nó không hoạt động, được. –

+0

mã ur này hoạt động cho tôi .... – Richa

+0

Mã nào? Của bạn hay của tôi? –

0

Không hoàn toàn nhưng nó cho phép bạn thực hiện rất nhiều thứ.

Lưu ý rằng thực hiện cuộc gọi đến shouldOverrideUrlLoading trong WebViewClient dường như không hoạt động, vì vậy bạn nên thực hiện quá trình xử lý của mình ở onPageFinished.

Đây là số blog post sẽ hướng dẫn bạn.

0

Để tải trang web từ url vào chế độ xem web, bạn không cần thiết lập ứng dụng khách webview. Không có ứng dụng khách webview, bạn có thể tải trang web vào chế độ xem web của mình. Nhưng WebViewClient mang lại nhiều lợi thế để xử lý webview. sử dụng mẫu để tải trang web từ url,


webView.loadUrl(yoururl); 
0

Lý do duy nhất url được mở ra trong trình duyệt mặc định android là vì "wv.loadUrl (" http://www.google.com ");"

Khi bạn tải http://www.google.com, trang web của google thực sự chuyển hướng trang đến http://www.google.co.in (giả sử bạn đang khởi chạy ứng dụng từ Ấn Độ).

Nếu bạn chạy "wv.loadUrl (" http://www.google.co.in ");", google sẽ không chuyển hướng trang và trang đầu tiên sẽ được mở trong ứng dụng của bạn và các nhấp chuột khác sẽ được mở trong trình duyệt hệ thống.

Để xử lý các nhấp chuột này, bạn cần có WebViewClient.

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