在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → android MyBrowser(简单网页浏览器)

android MyBrowser(简单网页浏览器)

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:0.21M
  • 下载次数:12
  • 浏览次数:191
  • 发布时间:2015-09-05
  • 实例类别:Android平台开发
  • 发 布 人:crazycode
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 浏览器 网页

实例介绍

【实例简介】
【实例截图】

【核心代码】

package cn.android.browser;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import cn.android.browser.HelpTabAct;
import cn.android.browser.HistoryBean;
import cn.android.browser.HttpData;
import cn.android.browser.SQLiteHelper;
import cn.android.browser.WriteFavoriteXml;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.ComponentName;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.ContextMenu.ContextMenuInfo;
import android.webkit.WebBackForwardList;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class Main extends Activity 
{
	private WebView mWebView = null;    
    final Activity context = this;   
    private SQLiteHelper mOpenHelper; 
    public static Cursor myCursor_one;
    Intent directCall;
    private WriteFavoriteXml writeXml = new WriteFavoriteXml();
    private ImageButton btn = null;
    private EditText edit = null;
    private ImageButton forwardBtn = null;
    private ImageButton backBtn = null;
    private ListView list = null;
    private Button go_back = null;
    private ImageButton menuBtn = null;
    
    private final static int HISTORY_ITEM = 0;	//历史记录
	private final static int HTTP_ITEM = 1;	//关于
	private final static int SHORTCUT_ITEM = 2;	//快捷方式
	private final static int ADD_FAVORITE = 3;	//加入收藏夹
	private final static int FAVORITE_ITEM = 4;	//收藏夹
	private final static int PREFERENCE_ITEM = 5;		//帮助网页
	private final static int EXIT_ITEM = 7;		//退出
	
	private String cur_url = "http://m.hao123.com";
	private final String ACTION_ADD_SHORTCUT = "com.android.launcher.action.INSTALL_SHORTCUT";
	List<Map<String, Object>> history_data = new ArrayList<Map<String, Object>>();
	List<HistoryBean> xml_data = new ArrayList<HistoryBean>();	
	String[] dialog_data = new String[]{};
	public int selectId = 0;
	
	SharedPreferences sp;
	Drawable drawable;
	
	private static String SAVE_KEY = "save-view";
	
	public static Main instance;

	 @Override
	    public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        Log.w("debug.onCreate","onCreate");
	        requestWindowFeature(Window.FEATURE_PROGRESS);//让进度条显示在标题栏上 
	        
	        mOpenHelper = new SQLiteHelper(this);
	        directCall = new Intent(Intent.ACTION_MAIN);//快捷方式
	        onInit();	
	        instance = this;	        
	        
		    if (savedInstanceState == null) 		        
		    {
		    	deleteTable();
	        } 
	        else 
	        {
	            Bundle map = savedInstanceState.getBundle(SAVE_KEY);
	            if (map != null) 
	            {
	                restoreState(map);
	            }
	        }
	 }
	
    private void onInit() {
        setContentView(R.layout.main);
        	
        	edit = (EditText)findViewById(R.id.edit_1);

        	mWebView = (WebView) findViewById(R.id.wv1); 

        	btn = (ImageButton)findViewById(R.id.button_1);

        	forwardBtn = (ImageButton)findViewById(R.id.forward_btn);

        	backBtn = (ImageButton)findViewById(R.id.back_btn);

        	menuBtn = (ImageButton)findViewById(R.id.menu_btn);

        btn.setOnClickListener( new Button.OnClickListener()
        {
            public void onClick( View v )
            {
                // TODO Auto-generated method stub
            	String str = edit.getText().toString();
            	if(str != "")
            	{
            		cur_url = str;
            		setTitle();
            		mWebView.loadUrl(str); 
            	}
            }
        } );
        
        forwardBtn.setOnClickListener( new Button.OnClickListener()
        {
            public void onClick( View v )
            {
                // TODO Auto-generated method stub
            	if(mWebView.canGoForward())
            		mWebView.goForward();
            }
        } );
        backBtn.setOnClickListener( new Button.OnClickListener()
        {
            public void onClick( View v )
            {
                // TODO Auto-generated method stub
            	if(mWebView.canGoBack())
            		mWebView.goBack();
            }
        } );
        menuBtn.setOnClickListener( new Button.OnClickListener()
        {
            public void onClick( View v )
            {
            	context.openOptionsMenu();
            }
        } );
        
        mWebView.setWebViewClient(new WebViewClient(){     
        	public boolean shouldOverrideUrlLoading(WebView  view, String url) {     
        		mWebView.loadUrl(url);  
        		cur_url = url;
        		setTitle();
        		//insertTable(url,1,mWebView.getTitle());
        		return true;     
        	}     
        	}); 
        
        mWebView.setWebChromeClient(new WebChromeClient() {   
            public void onProgressChanged(WebView view, int progress) {   
              //Activity和Webview根据加载程度决定进度条的进度大小   
             //当加载到100%的时候 进度条自动消失   
              context.setProgress(progress * 100); 
              if(progress>=100)
              {
            	  insertTable(cur_url,1,view.getTitle());
              }
              //Log.d("TTTTTTTTT",progress "," view.getTitle());
            }           
        	});   
        
        	mWebView.loadUrl(cur_url);        
        	setTitle();

        Log.i("debug.Init",cur_url);
    }
    
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) 
    {
    	 Log.i("onCreateContextMenu",v.toString());
    	 Log.i("onCreateContextMenu",String.valueOf(v.getId()));
    }   

    
    private void setTitle()
    {
    	Bitmap bitmap = mWebView.getFavicon();
        drawable = new BitmapDrawable(bitmap);     
        //edit.setCompoundDrawables(drawable, null, null, null);
        drawable = this.getResources().getDrawable(R.drawable.history);
        edit.setCompoundDrawablesWithIntrinsicBounds(drawable, null,null,null);  
        edit.setText(cur_url);
        //edit.setMaxLines(1);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
    	super.onCreateOptionsMenu(menu);
    	menu.add(0, HISTORY_ITEM, HISTORY_ITEM, R.string.history).setIcon(R.drawable.history); //setIcon,setText
    	menu.add(0, HTTP_ITEM, HTTP_ITEM, R.string.http_name).setIcon(R.drawable.about);
    	menu.add(0, SHORTCUT_ITEM, SHORTCUT_ITEM, R.string.shortcut).setIcon(R.drawable.icon);
    	menu.add(0, ADD_FAVORITE, ADD_FAVORITE, R.string.addFavorite).setIcon(R.drawable.add_favorite);
    	menu.add(0, FAVORITE_ITEM, FAVORITE_ITEM, R.string.favorite).setIcon(R.drawable.favorite);
    	menu.add(1, PREFERENCE_ITEM, PREFERENCE_ITEM, R.string.preference).setIcon(R.drawable.help);
    	return true;
    }
    
    public boolean onOptionsItemSelected(MenuItem item)
    {
    	switch(item.getItemId()){
    		case HISTORY_ITEM:
    			goto_history_view();
    			break;
    		case HTTP_ITEM:
    			showDialog(HTTP_ITEM);
    			break;
    		case SHORTCUT_ITEM:
    			createShortcut();
    			break;
    		case ADD_FAVORITE:
    			add_favorite();
    			break;
    		case FAVORITE_ITEM:
    			open_favorite();
    			break;
    		case PREFERENCE_ITEM:
    			goto_help_act();
    			break;
    		default:
    			break;
    	}
    	return super.onOptionsItemSelected(item);
    }
    
    private void goto_history_view()
    {
    	getHistory();
    	
    	setContentView(R.layout.history);
    	list = (ListView)findViewById(R.id.list);
        go_back = (Button)findViewById(R.id.go_back);
        
        SimpleAdapter adapter = new SimpleAdapter(this, getData(),
                android.R.layout.simple_list_item_2, new String[] {"网页","网址"},
                new int[] { android.R.id.text1 , android.R.id.text2});

//    	final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
//                		android.R.layout.simple_list_item_1, history_data);
        
    	list.setAdapter(adapter);
    	go_back.setOnClickListener( new Button.OnClickListener()
        {
            public void onClick( View v )
            {
                // TODO Auto-generated method stub
            	onInit();
            }
        } );
    	list.setOnItemClickListener(new OnItemClickListener() 
    	{
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
            {
                cur_url = history_data.get(position).get("网址").toString();
                onInit();
            }
        });
    }
    public void copyHistoryData(WebBackForwardList mylist)
    {
    	int i;  	
        for (i=0;i<mylist.getSize();i  )
        {
        	Map<String, Object> item = new HashMap<String, Object>();
        	item.put("网页", mylist.getItemAtIndex(i).getTitle());
            item.put("网址", mylist.getItemAtIndex(i).getUrl());
            history_data.add(item);

            //history_data.add(mylist.getItemAtIndex(i).getUrl().toString()); //查看浏览器历史
        }
    }
    private List<Map<String, Object>> getData()
    { 
    	return history_data; 
    } 
    
    protected Dialog onCreateDialog(int id) //只在第一次创建时调用
	{	
		if(id == FAVORITE_ITEM)
		{
    		return new AlertDialog.Builder(Main.this)
            .setTitle(R.string.fav_name)
             .setSingleChoiceItems(dialog_data, 0, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                    	selectId = whichButton;
                    }
                })
            .setNeutralButton(R.string.open_btn, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                    	if(selectId>=0)
                    	{
                    		cur_url = xml_data.get(selectId).getURL();
                    		edit.setText(cur_url);
                    		mWebView.loadUrl(cur_url);
                    	}
                    }
                })
            .setPositiveButton(R.string.del_btn, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                    	if(selectId>=0)
                    	writeXml.Write(context,"history.xml",writeXml.deleteElement(dialog_data[selectId]));
                		selectId = 0;
                		removeDialog(FAVORITE_ITEM);
                    }
                })
            .setNegativeButton(R.string.close_btn, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                    	removeDialog(FAVORITE_ITEM);
                    }
                })
            .create();
		}
		if(id == HTTP_ITEM)
		{
            return new AlertDialog.Builder(Main.this)
                .setTitle(R.string.http_name)
                .setItems(R.array.http_array, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Intent intent = new Intent();   
                            intent.setClass(Main.this, HttpData.class);   
                            Bundle b = new Bundle();   
                            b.putInt("id", which 1);
                            b.putString("url", cur_url);
                            intent.putExtras(b);   
                            startActivity(intent);   
                      
                    }
                })
                .create();
		}
		
		if(id == EXIT_ITEM)
		{
	            return new AlertDialog.Builder(Main.this)
	                .setIcon(R.drawable.icon)
	                .setTitle(R.string.exit_title)
	                .setMessage(R.string.exit_message)
	                .setPositiveButton(R.string.ok_btn, new DialogInterface.OnClickListener() {
	                    public void onClick(DialogInterface dialog, int whichButton) {
	                    	finish();
	                    }
	                })
	                .setNegativeButton(R.string.no_btn, new DialogInterface.OnClickListener() {
	                    public void onClick(DialogInterface dialog, int whichButton) {
	                    	
	                    }
	                })
	                .create();
		}
		return null;
	}
    
    /* 往表中插入数据 */
	private void insertTable(String url, int time, String title) 
	{
		time = (int)Math.floor(System.currentTimeMillis() / 1000 );
		SQLiteDatabase db = mOpenHelper.getWritableDatabase();
		myCursor_one = db.rawQuery("SELECT * FROM " SQLiteHelper.TB_NAME   " where name=?" , new String[]{String.valueOf(title)});
		String sql;
		String tip;
		if (myCursor_one.moveToFirst()) 
		{
			sql = "update "   SQLiteHelper.TB_NAME 
			  " set "   HistoryBean.TIME   "="   time   " where "   HistoryBean.NAME   "='"   title   "'";
			Log.i("update",title);
			tip = "更新";
		}
		else
		{
		 sql = "insert into "   SQLiteHelper.TB_NAME 
			  " ("   HistoryBean.URL   ", "   HistoryBean.TIME   ", "   HistoryBean.NAME   ") " 
			  "values('" url "','" time "','" title "');";
		 	Log.i("insert",title);
		 	tip = "插入";
		}
		try {
			db.execSQL(sql);
		} catch (SQLException e) {
			Toast.makeText(Main.this, tip "记录出错", Toast.LENGTH_LONG).show();
			return;
		}
				
		Toast.makeText(Main.this, tip "了记录", Toast.LENGTH_LONG).show();
	}
	/* 删除过时的历史记录 */
	private void deleteTable() 
	{
		int time = (int)Math.floor(System.currentTimeMillis() / 1000 ) - 86400;
		SQLiteDatabase db = mOpenHelper.getWritableDatabase();
		String sql = "delete from "   SQLiteHelper.TB_NAME 
			  " where "  time   ">"   HistoryBean.TIME;
		try {
			db.execSQL(sql);
		} catch (SQLException e) {
			Toast.makeText(Main.this, "删除记录出错", Toast.LENGTH_LONG).show();
		}	
	}
	
	private void getHistory() 
	{
		SQLiteDatabase db = mOpenHelper.getWritableDatabase();
		myCursor_one = db.rawQuery("SELECT * FROM " SQLiteHelper.TB_NAME, null);
		int url = myCursor_one.getColumnIndex(HistoryBean.URL);
		int name = myCursor_one.getColumnIndex(HistoryBean.NAME);
		history_data.clear();
		if (myCursor_one.moveToFirst()) 
		{
			do {
				Map<String, Object> item = new HashMap<String, Object>();
	        	item.put("网页", myCursor_one.getString(name));
	            item.put("网址", myCursor_one.getString(url));
	            history_data.add(item);
				//history_data.add(myCursor_one.getString(url));
			} while (myCursor_one.moveToNext());
		}
		myCursor_one.close();  	
	}
	
	private void createShortcut()
	{
		Intent addShortcut = new Intent(ACTION_ADD_SHORTCUT);  
    	String numToDial = null;  
    	Parcelable icon = null;  
    	
    	numToDial = "MyBrowser";  
		icon = Intent.ShortcutIconResource.fromContext(  
				this,R.drawable.icon);  
		
		addShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,  numToDial);   
		
		directCall.addCategory(Intent.CATEGORY_LAUNCHER);        
		directCall.setComponent(new ComponentName(this.getPackageName(),     
				this.getPackageName() ".Main")); 		
		
    	addShortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,  directCall);  
    	addShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);  
    	sendBroadcast(addShortcut); 
	}
	
	private void add_favorite()
	{
		String name = mWebView.getTitle();
    	String url = mWebView.getUrl();
    	if(name!=""&&url!="")
    	{     
    		writeXml.Write(context,"history.xml",writeXml.insertElement(name,url));
    		writeXml.onReadXml();
    		dialog_data = writeXml.getDialogData();
    		xml_data = writeXml.getXmlData();
    		showDialog(FAVORITE_ITEM);
    	}
	}
	
	private void open_favorite()
	{
		writeXml.onReadXml();
		dialog_data = writeXml.getDialogData();
		xml_data = writeXml.getXmlData();
		showDialog(FAVORITE_ITEM);
	}
	
	private void goto_help_act()
	{
		Intent intent = new Intent();
		intent.setClass(context, HelpTabAct.class);
		startActivity(intent);
	}
	
	public void setBlockImage(boolean flag)
	{
		Log.e("setBlockImage",flag==true?"true":"false");
		WebSettings webSettings = mWebView.getSettings(); 
		webSettings.setBlockNetworkImage(flag);  
	}	
	public void setCacheMode(boolean flag)
	{
		Log.e("setCacheMode",flag==true?"true":"false");
		WebSettings webSettings = mWebView.getSettings(); 
		if(flag)
			webSettings.setCacheMode(WebSettings.LOAD_CACHE_ONLY);
		else
			webSettings.setCacheMode(webSettings.LOAD_NO_CACHE);
	}
	public void setJavaScript(boolean flag)
	{
		Log.e("setJavaScript",flag==true?"true":"false");
		WebSettings webSettings = mWebView.getSettings(); 
		webSettings.setJavaScriptEnabled(flag);  
	}
	
	@Override protected void onResume() {
        super.onResume();
        Log.w("debug.onResume","onResume");
    }
    @Override protected void onSaveInstanceState(Bundle outState) {
    	outState.putBundle(SAVE_KEY, saveState());
    	Log.w("debug.onSaveInstanceState","onSaveInstanceState");
    }
    @Override protected void onPause() {
        super.onPause();
        Log.w("debug.onPause","onPause");
    }	
    @Override protected void onStart() {
        super.onStart();
        Log.w("debug.onStart","onStart");
    }
    @Override protected void onRestart() {
        super.onRestart();
        Log.w("debug.onRestart","onRestart");
    }
    @Override protected void onStop() {
        super.onStop();
        Log.w("debug.onStop","onStop");
    }
    @Override protected void onDestroy() {
    	showDialog(EXIT_ITEM);
        //super.onDestroy();
        Log.w("debug.onDestroy","onDestroy");
    } 
    
    public void restoreState(Bundle icicle) 
    {
    	cur_url = icicle.getString("URL");
    	mWebView.loadUrl(cur_url);
    	setTitle();
    }
    
    public Bundle saveState()
    {
    	Bundle map = new Bundle();
    	map.putString("URL", cur_url);
        return map;
    }
    
    @Override  
    public void onBackPressed() 
    {  
        dialog();  
    } 
    protected void dialog() 
    {  
        AlertDialog.Builder builder = new Builder(Main.this);  
        builder.setIcon(R.drawable.icon);
        builder.setTitle(R.string.exit_title);
        builder.setMessage(R.string.exit_message);
        builder.setPositiveButton(R.string.ok_btn,  
        new android.content.DialogInterface.OnClickListener() {  
            @Override  
            public void onClick(DialogInterface dialog, int which) {  
                dialog.dismiss();  
                android.os.Process.killProcess(android.os.Process.myPid());  
            }  
        });  
        builder.setNegativeButton(R.string.no_btn,  
        new android.content.DialogInterface.OnClickListener() {  
            @Override  
            public void onClick(DialogInterface dialog, int which) {  
                dialog.dismiss();  
            }  
        });  
        builder.create().show();  
    }  
	
}

标签: 浏览器 网页

实例下载地址

android MyBrowser(简单网页浏览器)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警