android 笔记
来源:互联网 发布:高帮男鞋 知乎 编辑:程序博客网 时间:2024/06/07 02:44
一、apk自动更新
使用 http通讯协议来下载文件,首先把版本信息制作成 version.json 数据格式如:
version.json
{"verCode":"11","verName":"9.0","apkname":"YunApp.apk","apkUrl":"http://www.nbycs.com:8011/Android/YunApp.apk"}
以及把apk文件放在服务器。
需设置IIS的 MIME类型的映射
把 .json与.apk格式的映射成 "application/octet-stream"类型,则可以下载。
应用中的例子代码段:
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
//检查更新
URL url = new URL("http://xxxx/Android/version.json");
// 创建连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();
// 获取文件大小
int length = conn.getContentLength();
// 创建输入流
InputStream is = conn.getInputStream();
result = inputStream2String(is);
conn.disconnect();
if(result.isEmpty())
{
result="找不到更新版本信息";
return result;
}
JSONObject objJson = null;
try
{
objJson = new JSONObject(formatString(result)); //因为json会有数据头(BOM),需要先去掉,否则在低版本中会报错
} catch (Exception e)
{
result = "无法使数据"+result+"生成JSONObject,异常信息:"+e.getMessage();
return result;
}
String verCode = objJson.getString("verCode");
String verName = objJson.getString("verName");
String apkUrl = objJson.getString("apkUrl");
String apkName = objJson.getString("apkname");
int versionCode = getVerCode(getApplicationContext());
if(!String.valueOf(versionCode).equals(verCode))
{
String sdpath = Environment.getExternalStorageDirectory() + "/";
String mSavePath = sdpath + "download";
//进行更新
url = new URL(apkUrl);
conn = (HttpURLConnection) url.openConnection();
conn.connect();
// 获取文件大小
length = conn.getContentLength();
// 创建输入流
is = conn.getInputStream();
File f = new File(mSavePath+"/"+apkName);
if(f.exists())
{
f.delete();
}
File file = new File(mSavePath);
// 判断文件目录是否存在
if (!file.exists())
{
file.mkdir();
}
File apkFile = new File(mSavePath, apkName);
FileOutputStream fos = new FileOutputStream(apkFile);
int count = 0;
// 缓存
byte buf[] = new byte[1024];
// 写入到文件中
do
{
int numread = is.read(buf);
count += numread;
// 计算进度条位置
progress = (int) (((float) count / length) * 100);
// 更新进度
mHandler.sendEmptyMessage(DOWNLOAD);
if (numread <= 0)
{
// 下载完成
mHandler.sendEmptyMessage(DOWNLOAD_FINISH);
break;
}
// 写入文件
fos.write(buf, 0, numread);
} while (!cancelUpdate);// 点击取消就停止下载.
fos.close();
is.close();
//安装
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(apkFile),"application/vnd.android.package-archive");
startActivity(intent);
result = String.valueOf(versionCode)+"--"+verCode;
}else{
result = "已是最新版本";
}
}else{
result = "没有存储权限";
}
}else if(cmd.equals("UPDATE")){
result = "暂未实现";
}
/*把InputStream 转成string*/
public static String inputStream2String (InputStream in) throws IOException {
StringBuffer out = new StringBuffer();
byte[] b = new byte[4096];
int n;
while ((n = in.read(b))!= -1){
out.append(new String(b,0,n));
}
//Log.i("String的长度",new Integer(out.length()).toString());
return out.toString();
}
/** * 去除bom报头 */
public static String formatString(String s) {
if (s != null) {
s = s.replaceAll("\ufeff", "");
}
return s;
}
二、使用webview做界面
myWebView = (WebView)findViewById(R.id.webApp);
myWebView.setPadding(0, 0, 0, 0);
WebSettings webSettings = myWebView.getSettings();
webSettings.setSavePassword(false);
webSettings.setSaveFormData(false);
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportZoom(false);
myWebView.setWebChromeClient(new WebChromeClient());
myWebView.setWebViewClient(new WebViewClient());
myWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "WebApp"); //与js交互的接口
myWebView.loadDataWithBaseURL(null, "","text/html", "utf-8",null);
myWebView.loadUrl(HomeUrl+"?tm="+String.valueOf(System.nanoTime()));
final class DemoJavaScriptInterface {
DemoJavaScriptInterface() {}
/**
* This is not called on the UI thread. Post a runnable to invoke
* loadUrl on the UI thread.
*/
public void clickOnAndroid() {
mHandler.post(new Runnable() {
public void run() {
Toast.makeText(MainActivity.this, "test", 1).show();
}
});
}
public String CallAndroid(String value)
{
String result = "00000|OK";
return result;
}
}
webview与js交互
js中调用Android中的函数
var result = window.WebApp.CallAndroid("abc");
android调用js中的函数
myWebView.loadUrl("javascript:Hello('abc')");
三、webview调用本地html
把html、js、css、images文件存在放在 assets 目录中,
WebView.loadUrl(“file:///android_asset/index.html”);
注意:index.html文件必须以 UTF-8文件格式保存,否则在 WebView 显示中文为乱码,需要增加
myWebView.getSettings().setDefaultTextEncodingName("gbk"); 这样的设置。
html文件中如果引用 js、css、images则也是使用assets的路径
<scripttype="text/javascript"src="file:///android_asset/js/jquery-1.8.3.min.js"></script>
四、设置Activity为全屏
有二种方式,第一中是在AndroidManifest.xml中设置activity的theme的属性,第二中在代码中设置无法标题的全屏
第一种:
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
第二种:
在在onCreate()里指定没有标题
super.onCreate(savedInstanceState);
/*set it to be no title*/
requestWindowFeature(Window.FEATURE_NO_TITLE);
/*set it to be full screen*/
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
- android笔记
- android笔记
- android笔记
- Android笔记
- Android笔记
- android笔记
- android 笔记
- android笔记
- Android笔记
- android笔记
- Android笔记
- Android笔记
- android笔记
- android笔记
- android笔记
- android 笔记
- android 笔记
- Android笔记
- vs2010 使用pthread进行多线程编程
- Android悬浮窗--获取内存
- Android.mk文件语法规范(Android.mk File)
- Java中的HashCode(1)之hash算法基本原理
- 仿IBM网站首页效果
- android 笔记
- SQL代码精选
- 在服务器上常用的一些mysql操作
- Java数据类型和MySql数据类型对应表
- 每天学点java一---获取图片
- 兴元X/3:建立卓越财务管理,让IT成为提升中小企业绩效管理的有力工具
- poj-2096-Collecting Bugs-概率DP
- however Fitflop Sling sales it is real notable
- Socket tips: 允许socket发送UDP Broadcast