用JAVA生成ANDORID一个壳,应用中嵌入一个网页即可

应用经常出现闪屏,一直没有解决,正好jquery mobile更新了1.1.0版本,升级后这个问题被弱化了
===========================================

之前作的网站总是出现进程意外,强制关闭。后来经过检查是线程问题,最后关闭线程就解决了问题


===========================================

安卓版本检查,传统方式是用户点击软件“检查版本”时来手动检查,这种方式OUT了。因为这样会有大部分人不会来检查版本,导致产品不敢大进步。

现在爱就是幸福网移动版采用服务器统一检查版本,发现有版本时提示用户,这个提示时间,提示内容都可以在服务器上操作。

因为我们用提只是安卓的一个壳即WebView,这时我们只需要加载的URL后加一个参数即可如
http://m.ai9475.com/?version=1.0.101


==========================================
这个WebView,有一问题就是加载时有空白,这时最好的办法是给它加一个背景,同时设置一个为0的透明度,这样用户不会有等的感觉,同时也可以宣传产品品牌。增加用户对产品的认识度

JAVA CODE

wv=(WebView)findViewById(R.id.wv);
wv .setBackgroundColor(0);
wv .setBackgroundResource(R.drawable.logo);


=========================================
JAVA CODE

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();
}


}



[color=red]main.xml[/color]

<?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);
}*/


}


==============================
[color=red]应用中加了友盟统计,但在运行时报找不到友盟的类,原因是打包时错误,使用如下方式[/color]

右键工程,

Build path,

java build path,选择libraries

在右边的按钮中点击“Add Library”

选择“User library”,点击“下一步”

点击“User librarys”按钮

在出现的界面中点击“New..”按钮

在弹出的界面中随便起一个名字,点击“确定”

点击“Add jars”按钮选择第三方jar包,点击“确定”完成操作。

这样的话该jar包会被一起打包到apk中,问题也就解决了!
=========================================
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值