Use webkit

Description

The following code shows how to Use webkit.

Example

Main layout xml file


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

Main Activity Java code


//from w  w  w . ja  va  2 s.  com
package com.java2s.myapplication3.app;

import static android.webkit.ConsoleMessage.MessageLevel.ERROR;

import java.io.File;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.MediaStore;
import android.util.Log;
import android.webkit.ConsoleMessage;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends Activity {

    private static final int REQUEST_PIC = 5;
    private static final int REQUEST_CONTACT = 4;
    private static final String LOG_TAG = "InterWebActivity";
    private WebView webView;
    private InterWebInterface webInterface;
    private static int onCreateCount = 0;
    private int onResumeCount = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = (WebView) findViewById(R.id.web);
        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);
        webInterface = new InterWebInterface();
        webView.addJavascriptInterface(webInterface, "android");
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public boolean onJsAlert(WebView view, String url, String message,
                                     JsResult result) {
                Log.d(LOG_TAG, String.format("WebView JsAlert message = %s",
                        url, message));
                return false;
            }

            @Override
            public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
                StringBuilder msg = new StringBuilder(consoleMessage
                        .messageLevel().name()).append('\t')
                        .append(consoleMessage.message()).append('\t')
                        .append(consoleMessage.sourceId()).append(" (")
                        .append(consoleMessage.lineNumber()).append(")\n");
                if (consoleMessage.messageLevel() == ERROR) {
                    Log.e(LOG_TAG, msg.toString());
                } else {
                    Log.d(LOG_TAG, msg.toString());
                }
                return true;
            }
        });
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Log.d(LOG_TAG, "Loading url=" + url);
                return false;
            }
        });
        webView.loadUrl("file:///android_asset/interweb.html");
        onCreateCount++;
    }

    @Override
    protected void onResume() {
        super.onResume();
        onResumeCount++;
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CONTACT && resultCode == RESULT_OK) {
            webInterface.executeContactCallback(data.getData());
        }
        if (requestCode == REQUEST_PIC && resultCode == RESULT_OK) {
            webInterface.executePicCallback(data.getData());
        }
    }

    private String getContactDisplayName(Uri contactUri) {
        String[] projection = { ContactsContract.Contacts._ID,
                ContactsContract.Contacts.DISPLAY_NAME };
        Cursor cursor = managedQuery(contactUri, projection, null, null, null);
        if (cursor.moveToNext()) {
            return cursor.getString(cursor
                    .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        }
        return "Couldn't find it";
    }

    private String getPictureData(Uri pictureUri) {
        String[] projection = { MediaStore.MediaColumns.DATA };
        Cursor cursor = managedQuery(pictureUri, projection, null, null, null);
        if (cursor.moveToNext()) {
            return cursor.getString(cursor
                    .getColumnIndex(MediaStore.MediaColumns.DATA));
        }
        return "";
    }

    class InterWebInterface {
        String callback;

        public String getCreateCount() {
            return String.valueOf(onCreateCount);
        }

        public String getResumeCount() {
            return String.valueOf(onResumeCount);
        }

        public String getUserName() {
            AccountManager mgr = AccountManager.get(MainActivity.this);
            Account gAccount = mgr.getAccountsByType("com.google")[0];
            return gAccount.name;
        }

        public void selectContact(String callback) {
            this.callback = callback;
            Intent intentContact = new Intent(Intent.ACTION_PICK,
                    ContactsContract.Contacts.CONTENT_URI);
            startActivityForResult(intentContact, REQUEST_CONTACT);
        }

        public void selectPicture(String callback) {
            this.callback = callback;
            Intent intentPicture = new Intent(Intent.ACTION_GET_CONTENT);
            intentPicture.setType("image/*");
            startActivityForResult(intentPicture, REQUEST_PIC);
        }

        protected void executeContactCallback(Uri contact) {
            String name = getContactDisplayName(contact);
            webView.loadUrl(String.format("javascript:contactCallback('%s')",
                    name));
        }

        protected void executePicCallback(Uri picture) {
            String filePath = getPictureData(picture);
            File f = new File(filePath);
            String uri = Uri.fromFile(f).toString();
            webView.loadUrl(String.format("javascript:pictureCallback('%s')",
                    uri));
        }
    }
}
Use webkit




















Home »
  Android »
    Android UI »




UI Basics
Action Bar
Animation
Button
Canvas
CheckBox
Clock Date Picker
Dialog
EditText
Event
Fragment
Gesture
GridView
ImageView
Layout
ListView
Map
Menu
Model
OpenGL
ProgressBar
RadioButton
Spinner
Tab
TextView
Thread
Toast
Video
View
WebView