给webapp加上一个apk外壳
原文: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外壳的更多相关文章
- CSS:在input、pre中左边加上一个图标(一行和多行)
前言 接触过EasyUI的朋友都知道其警告框就是左边有个三角警告图标,此文所做的效果正是这样.此外,还将示例多行的做法. 一.在input左边加上一个图标(一行) 注:left center定义了图标 ...
- Delphi函数翻译成VC要注意句柄指针传递(传递Handle的时候,必须加上一个指针引用,才能消除编译错误)
Delphi里做了魔法变化,每个变量名称本身就是指针,因为不怎么需要指针语法.我也不知道是不是因为这个原因引起的Delphi与VC对句柄的不同处理. 这是Delphi的强行关机函数,好用,调用方式:W ...
- 【Xamarin挖墙脚系列:如何从一个Apk程序转化为Xamarin的程序】
原文:[Xamarin挖墙脚系列:如何从一个Apk程序转化为Xamarin的程序] 工欲善其事必先利其器:工具下载:http://pan.baidu.com/s/1skxjwgH 接下来,我用个小的应 ...
- 给WebApp加一个“壳”,实现Andriod系统添加到桌面
IOS系统的Safari浏览器有一个“添加到桌面”的功能,能在手机桌面上为你的Webapp添加一个快捷方式,其外观和Native App看起来一样. 这个功能对Webapp来说太有用了,它能让用户像“ ...
- android应用如何启动另外一个apk应用
在开发的过程中,经常会遇到在一个应用中启动另外一个apk应用的情况 问题的核心点在于我们要拿到第三方apk的package名称跟class名称, 如:package名称是com.funcity.tax ...
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点-----层序遍历的应用题
题目:对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点:如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL:给出程序实现,并分析时间复杂度和空间复杂度. ...
- 看我如何从一个APK到最终拿下域管理权限
本文我将向大家介绍在企业网络中使用个人智能手机,会给我们企业网络造成怎样的潜在威胁?事实证明,想要欺骗一位企业内部的员工并让其安装恶意应用程序,其实并不困难.一旦成功,攻击者就可以突破企业内网的防护机 ...
- 制定一个apk路径 然后跳出安装界面
制定一个apk的路径 然后跳出界面让用户选择是否安装 我们系统有一个写好的Activity来协助我们完成这一功能 我们来看看它的清单文件 <?xml version="1.0" ...
- Js闭包应用场合,为vue的watch加上一个延迟器
利用vue的watch可以很简单的监听数据变化 而watch来侦听数据继而调用业务逻辑是一种十分常见的模式 最典型的就是自动搜索功能,如下图,这里我们用watch侦听被双向绑定的input值,而后触发 ...
随机推荐
- Redis未授权总结
以前的笔记 简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(so ...
- super和this
super注意点: 1.super调用父类的构造方法,必须在构造方法的第一个 2.super必须只能出现在子类的方法或者构造方法中 3.super和this不能同时调用构造方法 this: 代表的对象 ...
- Part 32 AngularJS controller as syntax
So far in this video series we have been using $scope to expose the members from the controller to t ...
- 问题 D: 某种序列
题目描述 数列A满足An = An-1 + An-2 + An-3, n >= 3 编写程序,给定A0, A1 和 A2, 计算A99 输入 输入包含多行数据 每行数据包含3个整数A0, A ...
- js 函数和函数的参数
/* * 函数 function * - 函数也是一个对象 * - 函数中可以封装一些功能(代码),在需要时可以执行这些功能(代码) * - 函数中可以保存一些代码在需要的时候 ...
- vue2与vue3的差异(总结)?
vue作者尤雨溪在开发 vue3.0 的时候开发的一个基于浏览器原生 ES imports 的开发服务器(开发构建工具).那么我们先来了解一下vite Vite Vite,一个基于浏览器原生 ES i ...
- 一文理解Java-class字节码文件
前言 java语言在其刚诞生之际喊出的口号--"Write Once,Run Anywhere",正是基于字节码(byte code)而存在的,java能够做到平台无关性,得力于这 ...
- 【Microsoft Azure 的1024种玩法】七.Azure云端搭建部署属于自己的维基百科
[简介] MediaWiki是全球最著名的开源wiki程序,运行于PHP+MySQL环境.MediaWiki从2002年2月25日被作为维基百科全书的系统软件,并有大量其他应用实例.MediaWiki ...
- CF1264D2 Beautiful Bracket Sequence (hard version)
考虑\(D1\)的\(O(n^2)\),我们直接进行组合处理. 考虑在\(p\)这个位置,左边有\(l\)个(,右边有\(r\)个),左边有\(l\)个问号,右边有\(r\)个问号. 这个位置的贡献为 ...
- AtCoder Grand Contest 055 题解
A 赛时直到最后 10min 才做出这个 A 题,之前猜了一个结论一直没敢写,本来不抱啥希望 AC 的结果比赛结束时交了一发竟然 A 了,由此可见我的水平之菜/dk 考虑每次取出字符串开头字符,不妨设 ...