原文:http://blog.csdn.net/cmyh100/article/details/77862962

1、在Android Studio里创建一个项目

2.创建MyApplication.java  1.创建webview  2.创建一个线程把文件复制到一个文件夹里  3.解压缩包  4.webview的url指向本地

public class stuGuide extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_stu_guide);
/*WebView main = (WebView)findViewById(R.id.main);*/
webView = (WebView) findViewById(R.id.main);
new Thread(new Runnable() {
@Override
public void run() {
putfile();
try {
unZipWebZipInThread();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
webView.goBack();// 返回前一个页面
return true;
}
return super.onKeyDown(keyCode, event);
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
File path = Environment.getExternalStorageDirectory();
String mainUrl ="file://" + path + "/stuGuide/studentGuide/index.html"; WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.loadUrl(mainUrl);
}
};
private void putfile() {
InputStream is = null;
try {
is = this.getAssets().open("studentGuide.zip");
File path = Environment.getExternalStorageDirectory();
System.out.println("path== " + path);
File file = new File(path + "/stuGuide");
file.mkdir();
File absoluteFile = file.getAbsoluteFile();
System.out.println("absoluteFile===" + absoluteFile);
if (file.exists()) {
System.out.println("file exists");
} FileOutputStream fos = new FileOutputStream(new File(file.getAbsolutePath()+"/studentGuide.zip"));
byte[] buffer = new byte[1024];
int byteCount;
while ((byteCount = is.read(buffer)) != -1) {
fos.write(buffer, 0, byteCount);
}
fos.flush();
is.close();
fos.close(); } catch (IOException e) {
e.printStackTrace();
} } private void unZipWebZipInThread() throws Exception { File path = Environment.getExternalStorageDirectory();
String dstPath = path + "/stuGuide/studentGuide.zip";
ZipFile zipFile = new ZipFile(dstPath);
if (zipFile.isValidZipFile()) {
final ProgressMonitor progressMonitor = zipFile.getProgressMonitor();
new Thread(new Runnable() {
@Override
public void run() {
try {
int percentDone;
while (true) {
Thread.sleep(50);
percentDone = progressMonitor.getPercentDone();
if (percentDone >= 100) {
break;
}
}
mHandler.sendEmptyMessage(1);
} catch (InterruptedException e) {
//JavaLog.e(TAG, e);
}
}
}).start();
zipFile.extractAll(path + "/stuGuide/");
}
} }

3、Activity.xml

<WebView
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

4、AndroidManifest.xml

网络允许
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
sdcard外部存储权限允许
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
webview全屏去头部
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
手机转屏不重新加载activity
android:configChanges="keyboardHidden|orientation|screenSize">

5、在main文件夹下新建一个assets文件夹,把webapp打包成zip压缩包,粘贴放入

需要解压缩,所以得导入(java处理zip压缩包,搜索下载)zip4j_1.3.2.jar

build.gradle 需要配置一下刚刚导入的jar包

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.1.1' compile files('libs/zip4j_1.3.2.jar')
}

给webapp加上一个apk外壳的更多相关文章

  1. CSS:在input、pre中左边加上一个图标(一行和多行)

    前言 接触过EasyUI的朋友都知道其警告框就是左边有个三角警告图标,此文所做的效果正是这样.此外,还将示例多行的做法. 一.在input左边加上一个图标(一行) 注:left center定义了图标 ...

  2. Delphi函数翻译成VC要注意句柄指针传递(传递Handle的时候,必须加上一个指针引用,才能消除编译错误)

    Delphi里做了魔法变化,每个变量名称本身就是指针,因为不怎么需要指针语法.我也不知道是不是因为这个原因引起的Delphi与VC对句柄的不同处理. 这是Delphi的强行关机函数,好用,调用方式:W ...

  3. 【Xamarin挖墙脚系列:如何从一个Apk程序转化为Xamarin的程序】

    原文:[Xamarin挖墙脚系列:如何从一个Apk程序转化为Xamarin的程序] 工欲善其事必先利其器:工具下载:http://pan.baidu.com/s/1skxjwgH 接下来,我用个小的应 ...

  4. 给WebApp加一个“壳”,实现Andriod系统添加到桌面

    IOS系统的Safari浏览器有一个“添加到桌面”的功能,能在手机桌面上为你的Webapp添加一个快捷方式,其外观和Native App看起来一样. 这个功能对Webapp来说太有用了,它能让用户像“ ...

  5. android应用如何启动另外一个apk应用

    在开发的过程中,经常会遇到在一个应用中启动另外一个apk应用的情况 问题的核心点在于我们要拿到第三方apk的package名称跟class名称, 如:package名称是com.funcity.tax ...

  6. 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点-----层序遍历的应用题

    题目:对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点:如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL:给出程序实现,并分析时间复杂度和空间复杂度. ...

  7. 看我如何从一个APK到最终拿下域管理权限

    本文我将向大家介绍在企业网络中使用个人智能手机,会给我们企业网络造成怎样的潜在威胁?事实证明,想要欺骗一位企业内部的员工并让其安装恶意应用程序,其实并不困难.一旦成功,攻击者就可以突破企业内网的防护机 ...

  8. 制定一个apk路径 然后跳出安装界面

    制定一个apk的路径 然后跳出界面让用户选择是否安装 我们系统有一个写好的Activity来协助我们完成这一功能 我们来看看它的清单文件 <?xml version="1.0" ...

  9. Js闭包应用场合,为vue的watch加上一个延迟器

    利用vue的watch可以很简单的监听数据变化 而watch来侦听数据继而调用业务逻辑是一种十分常见的模式 最典型的就是自动搜索功能,如下图,这里我们用watch侦听被双向绑定的input值,而后触发 ...

随机推荐

  1. 【python】以souhu邮箱为例学习DDT数据驱动测试

    前言 DDT(Data-Driven Tests)是针对 unittest 单元测试框架设计的扩展库.允许使用不同的测试数据来运行一个测试用例,并将其展示为多个测试用例.通俗理解为相同的测试脚本使用不 ...

  2. (一)初识MySQL

    JavaEE:企业级Java开发  Web 前端(页面:展示,数据) 后台(连接点,连接数据库JDBC,链接前端(控制,控制视图跳转和给前端传递数据)) 数据库(存数据,Txt,Excel,word) ...

  3. 菜鸡的Java笔记 第六 - java 方法

    前提:现在所讲解的方法定义格式,只属于JAVA 方法定义的其中一种组成方式.而完整的组成方式将随着学习逐步渗透. 1.方法的基本定义 方法(Method)在一些书中也会有人将其说是  函数(Funct ...

  4. Linux——搭建Samba(CIFS)服务器

    一.Samba的基本概念 Samba服务:是提供基于Linux和Windows的共享文件服务,服务端和客户端都可以是Linux或Windows操作系统.可以基于特定的用户访问,功能比NFS更强大. S ...

  5. Spark面试题(七)——Spark程序开发调优

    Spark系列面试题 Spark面试题(一) Spark面试题(二) Spark面试题(三) Spark面试题(四) Spark面试题(五)--数据倾斜调优 Spark面试题(六)--Spark资源调 ...

  6. [spojQTREE7]Query on a tree VII

    即QTREE5和QTREE6组合,即将原本维护子树范围内点数改为维护子树范围内最小值即可,由于最小值没有可减性,因此需要使用set (虽然形式上与QTREE5类似,但QTREE5维护的信息更巧妙一些, ...

  7. [cf720D]Slalom

    对于每一行,这些障碍将其划分为若干段,记第$i$行($y=i$时)从左到右第$j$段为$[l_{i,j},r_{i,j}]$ 显然一条路径恰好经过每一行中的一段,且两种方案不同当且仅当其中经过的一段不 ...

  8. 手把手教你实现Android真机远程截屏

    先看效果演示 接下来手把手教你实现这样的效果. minicap简介 minicap是一个可以远程获取android屏幕画面的开源库,它在低版本的Android系统上采用截屏的方式获取画面,在Andro ...

  9. Win10更新Win11步骤及体验感

    Win11发布也有一段时间了,最近工作闲下来才想起来更新一下试试,更新过程还算顺利,需要改一下电脑的主板设置之后就可以下载官方提供的更新包,记录一下安装过程中遇到的问题以便查看. Win11更新 使用 ...

  10. vscode 整理————开篇之力(一)

    前言 作为一个开发为什么对一个vscode 这样的工具进行整理呢,因为vscode 非常的常用,它包含很多编辑器共同有的特征,这些特征帮助我们了解其他编辑器. 这里可能就有人疑问了,我们需要去非常的关 ...