`
sinykk
  • 浏览: 357177 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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




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

 
}


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

右键工程,

  Build path,

  java build path,选择libraries

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

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

  点击“User librarys”按钮

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

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

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

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

分享到:
评论
2 楼 sinykk 2014-03-01  
libmw 写道
你好,请问现在爱就是幸福网的首页,扫描二维码为啥不是下载apk而是直接跳转到一个wap网页了呢?是因为使用webview壳有啥问题么?


那个是我们还没有修改的。因为我们现在在开发原生app,这个app还没有开发好,所以暂时让用户使用手机版
1 楼 libmw 2014-02-24  
你好,请问现在爱就是幸福网的首页,扫描二维码为啥不是下载apk而是直接跳转到一个wap网页了呢?是因为使用webview壳有啥问题么?

相关推荐

    用一个URL加一个JAVA壳做成一个安卓应用

    用一个URL加一个JAVA壳做成一个安卓应用 本程序是由爱就是幸福网www.ai9475.com 编写,主要应用到android的webView 版本: v2.0 若想获得更新版本欢迎加入我们的 “本地应用开发webapp"QQ群,一起协力开发一处...

    xsf java ios andorid

    快速开发框架,java,andorid,ios,测试专用,欢迎测试。

    andorid生成二维码—条形码

    例如,你可以设计一个EditText用于输入地址或字符串,一个Button用于触发生成操作,再添加一个ImageView用于展示生成的二维码或条形码。 当用户点击按钮时,获取EditText中的文本,然后调用ZXing库的API生成二维码...

    Android应用内嵌网页WebView

    在Android应用开发中,内嵌WebView是一个非常常见的需求,它允许开发者在应用程序中展示网页内容。WebView组件是Android SDK提供的一种原生控件,能够直接在应用内部加载和显示HTML、CSS以及JavaScript等内容,极大...

    Andorid二维码的生成和识别

    首先,我们来看`BarCodeTest`,这是一个用于生成二维码的DEMO。在Android中,生成二维码通常借助第三方库,如ZXing(Zebra Crossing)库。ZXing是一个开源项目,提供了多种条码和二维码的生成与扫描功能。在`...

    深入浅出Rhino:Java与JS互操作

    总之,《深入浅出Rhino:Java与JS互操作》是一本全面解析Rhino引擎及其在Java开发中应用的指南,对于希望在Java应用中嵌入JavaScript功能或使用JavaScript进行服务器端编程的开发者来说,是一本不可多得的参考书。...

    Andorid,C++,Java,Weka

    它是Google公司维护的Linux内核为基础的软件平台,允许开发者使用Java和Kotlin等编程语言创建应用程序。Android SDK(软件开发工具包)是开发Android应用的基础,包含了一系列工具,如Android Studio IDE、模拟器、...

    andorid中的fragment详细介绍及应用

    在Android开发中,Fragment是应用程序界面的一个可重用组件,它可以在Activity中嵌入并管理多个视图。Fragment的设计初衷是为了支持多屏显示和不同形态的设备,如手机和平板,使得开发者可以更加灵活地构建复杂的...

    andorid中TabHost的使用

    在Android开发中,TabHost是一个非常重要的组件,它允许我们创建具有多个标签(Tab)的界面,每个标签对应一个不同的活动(Activity)或视图(View)。本文将深入讲解如何在Android应用程序中有效地使用TabHost。 ...

    Andorid JAVA IOS 全套汇总

    Android系统提供了丰富的应用程序框架,允许开发者使用Java语言编写应用程序,通过Google Play商店分发给全球用户。 在Android开发中,学习内容包括但不限于: 1. Android SDK:开发者需要下载并安装SDK,它包含了...

    andorid屏幕适配dimens生成工具

    在Android应用开发中,屏幕适配是一个至关重要的环节,因为它涉及到应用在不同尺寸和分辨率的设备上呈现的视觉效果和用户体验。"android-screen-tool"是一个专门为Android开发者设计的工具,旨在简化屏幕适配过程,...

    安卓 Andorid SQLite例子打包

    压缩包中的"安卓 Andorid SQLite例子打包"可能包含了一个完整的Android Studio项目,包括`DBHelper`、`MainActivity`等源码文件,以及相关的资源文件。通过解压并导入Android Studio,开发者可以学习和参考这个示例...

    andorid 组件开发一

    在Android应用开发中,组件是构成应用程序的基本单元。Android提供了四大组件:Activity、Service、BroadcastReceiver和ContentProvider,它们各自负责不同的功能,是构建应用程序的关键元素。本篇将重点讨论Android...

    Andorid 获取前台应用的历史信息

    4. 分析结果:返回的结果是一个`List&lt;UsageStats&gt;`,每个`UsageStats`对象代表一个应用的使用统计信息,包括开始使用时间、结束使用时间、总使用时长等。你可以遍历这个列表,根据`UsageStats.getLastTimeUsed()`来...

    Andorid 应用开发详解

    根据提供的标题“Android应用开发详解”以及描述,我们可以总结出一系列与Android应用开发相关的知识点。 ### Android应用开发概述 Android应用开发是指利用Google提供的Android操作系统平台进行应用程序开发的...

    andorid中调用JNI

    在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。JNI在Android世界中扮演着重要角色,尤其是在性能优化、使用C/C++库或者实现特定硬件功能时。本篇文章...

    andorid打地鼠源码

    首先,"andorid打地鼠源码"基于Android Studio,这是一个集成开发环境(IDE),用于构建Android应用程序。你需要熟悉其界面和基本操作,包括创建新项目、导入库、编写代码和运行应用。 1. **Java或Kotlin编程语言**...

    Android生成唯一标识符UUID(完全替代IMEI)

    在Android中,我们可以使用Java的`java.util.UUID`类来生成UUID。这个类提供了`randomUUID()`方法,它会生成一个基于当前时间的随机UUID,保证在全局范围内的唯一性。 ```java UUID uniqueId = UUID.randomUUID(); ...

    Andorid webview和js的交互

    在Android应用开发中,WebView是一个强大的组件,它允许开发者在应用程序内部嵌入网页内容,同时提供了与JavaScript交互的能力。这使得我们能够利用HTML、CSS和JavaScript的灵活性来构建部分或全部用户界面,同时还...

Global site tag (gtag.js) - Google Analytics