用JAVA生成ANDORID一个壳,应用中嵌入一个网页即可
应用经常出现闪屏,一直没有解决,正好jquerymobile更新了1.1.0版本,升级后这个问题被弱化了
===========================================
之前作的网站总是出现进程意外,强制关闭。后来经过检查是线程问题,最后关闭线程就解决了问题
===========================================
安卓版本检查,传统方式是用户点击软件“检查版本”时来手动检查,这种方式OUT了。因为这样会有大部分人不会来检查版本,导致产品不敢大进步。
现在爱就是幸福网移动版采用服务器统一检查版本,发现有版本时提示用户,这个提示时间,提示内容都可以在服务器上操作。
因为我们用提只是安卓的一个壳即WebView,这时我们只需要加载的URL后加一个参数即可如
http://m.ai9475.com/?version=1.0.101
==========================================
这个WebView,有一问题就是加载时有空白,这时最好的办法是给它加一个背景,同时设置一个为0的透明度,这样用户不会有等的感觉,同时也可以宣传产品品牌。增加用户对产品的认识度
JAVACODE
wv=(WebView)findViewById(R.id.wv); wv .setBackgroundColor(0); wv .setBackgroundResource(R.drawable.logo);
=========================================
JAVACODE
package com.tian.sinykk; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.KeyEvent; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; public class Androidtest3Activity extends Activity { /** Called when the activity is first created. */ WebView wv; ProgressDialog pd; Handler handler; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init();//执行初始化函数 loadurl(wv,"http://m.ai9475.com"); handler=new Handler(){ public void handleMessage(Message msg) {//定义一个Handler,用于处理下载线程与UI间通讯 if (!Thread.currentThread().isInterrupted()) { switch (msg.what) { case 0: pd.show();//显示进度对话框 break; case 1: pd.hide();//隐藏进度对话框,不可使用dismiss()、cancel(),否则再次调用show()时,显示的对话框小圆圈不会动。 break; } } super.handleMessage(msg); } }; } public void init(){//初始化 wv=(WebView)findViewById(R.id.wv); wv.getSettings().setJavaScriptEnabled(true);//可用JS wv.setScrollBarStyle(0);//滚动条风格,为0就是不给滚动条留空间,滚动条覆盖在网页上 wv.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(final WebView view, final String url) { loadurl(view,url);//载入网页 return true; }//重写点击动作,用webview载入 }); wv.setWebChromeClient(new WebChromeClient(){ public void onProgressChanged(WebView view,int progress){//载入进度改变而触发 if(progress==100){ handler.sendEmptyMessage(1);//如果全部载入,隐藏进度对话框 } super.onProgressChanged(view, progress); } }); pd=new ProgressDialog(Androidtest3Activity.this); pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); pd.setMessage("数据载入中,请稍候!"); } public boolean onKeyDown(int keyCode, KeyEvent event) {//捕捉返回键 if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) { wv.goBack(); return true; }else if(keyCode == KeyEvent.KEYCODE_BACK){ ConfirmExit();//按了返回键,但已经不能返回,则执行退出确认 return true; } return super.onKeyDown(keyCode, event); } public void ConfirmExit(){//退出确认 AlertDialog.Builder ad=new AlertDialog.Builder(Androidtest3Activity.this); ad.setTitle("退出"); ad.setMessage("是否退出软件?"); ad.setPositiveButton("是", new DialogInterface.OnClickListener() {//退出按钮 @Override public void onClick(DialogInterface dialog, int i) { // TODO Auto-generated method stub Androidtest3Activity.this.finish();//关闭activity } }); ad.setNegativeButton("否",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int i) { //不退出不用执行任何操作 } }); ad.show();//显示对话框 } public void loadurl(final WebView view,final String url){ new Thread(){ public void run(){ handler.sendEmptyMessage(0); view.loadUrl(url);//载入网页 } }.start(); } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout android:orientation="vertical" android:id="@+id/tab1" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <WebView android:id="@+id/wv" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_x="0.0dip" android:layout_y="0.0dip" android:layout_weight="1.0" /> </AbsoluteLayout>
今天又做了些修改,增加了菜单,刷新,分享,退出。同时也增加了加载进度条
package com.tian.sinykk; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; public class Androidtest3Activity extends Activity { /** Called when the activity is first created. */ WebView wv; ProgressDialog pd; Handler handler; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init();//执行初始化函数 loadurl(wv,"http://m.ai9475.com"); } // 点击Menu时,系统调用当前Activity的onCreateOptionsMenu方法,并传一个实现了一个Menu接口的menu对象供你使用 @Override public boolean onCreateOptionsMenu(Menu menu) { /* * add()方法的四个参数,依次是: * 1、组别,如果不分组的话就写Menu.NONE, * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单 * 3、顺序,那个菜单现在在前面由这个参数的大小决定 * 4、文本,菜单的显示文本 */ menu.add(Menu.NONE, Menu.FIRST + 1, 5, "分享").setIcon( android.R.drawable.ic_menu_share); // setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以 // android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的 menu.add(Menu.NONE, Menu.FIRST + 2, 2, "刷新").setIcon( android.R.drawable.ic_menu_rotate); menu.add(Menu.NONE, Menu.FIRST + 3, 6, "退出").setIcon( android.R.drawable.ic_menu_close_clear_cancel); // return true才会起作用 return true; } //菜单项被选择事件 @Override public boolean onOptionsItemSelected(MenuItem item) { WebView wv1=(WebView)findViewById(R.id.wv); switch (item.getItemId()) { case Menu.FIRST + 1: //分享 Intent intent=new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_SUBJECT,wv1.getTitle()); intent.putExtra(Intent.EXTRA_TEXT, wv1.getTitle()+" 可通过后面网址访问"+wv1.getUrl()); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(Intent.createChooser(intent, "分享")); break; case Menu.FIRST + 2: //刷新 wv1.reload(); break; case Menu.FIRST + 3: //退出应用 System.exit(0); break; } return false; } public void init(){//初始化 wv=(WebView)findViewById(R.id.wv); wv.getSettings().setJavaScriptEnabled(true);//可用JS wv.setScrollBarStyle(0);//滚动条风格,为0就是不给滚动条留空间,滚动条覆盖在网页上 wv.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(final WebView view, final String url) { loadurl(view,url);//载入网页 return true; } }); wv.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { setTitle("页面加载中,请稍候..." + progress + "%"); setProgress(progress * 100); if (progress == 100) { setTitle(view.getTitle()); } } }); } public boolean onKeyDown(int keyCode, KeyEvent event) {//捕捉返回键 if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) { wv.goBack(); return true; }else if(keyCode == KeyEvent.KEYCODE_BACK){ ConfirmExit();//按了返回键,但已经不能返回,则执行退出确认 return true; } return super.onKeyDown(keyCode, event); } public void ConfirmExit(){//退出确认 AlertDialog.Builder ad=new AlertDialog.Builder(Androidtest3Activity.this); ad.setTitle("退出"); ad.setMessage("是否退出软件?"); ad.setPositiveButton("是", new DialogInterface.OnClickListener() {//退出按钮 @Override public void onClick(DialogInterface dialog, int i) { Androidtest3Activity.this.finish();//关闭activity } }); ad.setNegativeButton("否",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int i) { //不退出不用执行任何操作 } }); ad.show();//显示对话框 } public void loadurl(final WebView view,final String url){ new Thread(){ public void run(){ view.loadUrl(url);//载入网页 } }.start(); } /* *//** * 分享应用 * @param view *//* public void onClickShare() { Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); sendIntent.setType("text/plain"); startActivity(sendIntent); }*/ }
==============================
应用中加了友盟统计,但在运行时报找不到友盟的类,原因是打包时错误,使用如下方式
右键工程,
Buildpath,
javabuildpath,选择libraries
在右边的按钮中点击“AddLibrary”
选择“Userlibrary”,点击“下一步”
点击“Userlibrarys”按钮
在出现的界面中点击“New..”按钮
在弹出的界面中随便起一个名字,点击“确定”
点击“Addjars”按钮选择第三方jar包,点击“确定”完成操作。
这样的话该jar包会被一起打包到apk中,问题也就解决了!
=========================================