- 浏览: 912629 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
天天来注册:
...
try catch finally 用法 -
tadpole_java:
谢谢你的分享。
二十七、Qt数据库(七)QSqlRelationalTableModel(转) -
359449749tan:
android之EditText文本监听(addTextChangedListener) -
michael_wang:
人过留名 多谢分享
Android NOtification 使用 -
wilsonchen:
wangqi0614 写道这个删除是删除所有的把?能不能值删除 ...
Android的SharedPreferences保存与删除数据简单实例
package com.hiyo.game.pdk.tool;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.util.Log;
import android.webkit.URLUtil;
import com.hiyo.game.pdk.activity.R;
/**
* Android AutoUpdate.
*
* lazybone/2010.08.20
*
* 1.Set apkUrl.
*
* 2.check().
*
* 3.add delFile() method in resume()\onPause().
*/
public class MyAutoUpdate {
public Activity activity = null;
public int versionCode = 0;
public String versionName = "";
private static final String TAG = "AutoUpdate";
private String currentFilePath = "";
private String currentTempFilePath = "";
private String fileEx = "";
private String fileNa = "";
private String strURL = "http://127.0.0.1:81/ApiDemos.apk";
private ProgressDialog dialog;
public MyAutoUpdate(Activity activity) {
this.activity = activity;
getCurrentVersion();
}
public void check() {
if (isNetworkAvailable(this.activity) == false) {
return;
}
if (true) {// Check version.
showUpdateDialog();
}
}
public static boolean isNetworkAvailable(Context ctx) {
try {
ConnectivityManager cm = (ConnectivityManager) ctx
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
return (info != null && info.isConnected());
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public void showUpdateDialog() {
@SuppressWarnings("unused")
AlertDialog alert = new AlertDialog.Builder(this.activity)
.setTitle("Title")
.setIcon(R.drawable.icon)
.setMessage("Update or not?")
.setPositiveButton("Update",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
downloadTheFile(strURL);
showWaitDialog();
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
dialog.cancel();
}
}).show();
}
public void showWaitDialog() {
dialog = new ProgressDialog(activity);
dialog.setMessage("Waitting for update...");
dialog.setIndeterminate(true);
dialog.setCancelable(true);
dialog.show();
}
public void getCurrentVersion() {
try {
PackageInfo info = activity.getPackageManager().getPackageInfo(
activity.getPackageName(), 0);
this.versionCode = info.versionCode;
this.versionName = info.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
private void downloadTheFile(final String strPath) {
fileEx = strURL.substring(strURL.lastIndexOf(".") + 1, strURL.length())
.toLowerCase();
fileNa = strURL.substring(strURL.lastIndexOf("/") + 1,
strURL.lastIndexOf("."));
try {
if (strPath.equals(currentFilePath)) {
doDownloadTheFile(strPath);
}
currentFilePath = strPath;
Runnable r = new Runnable() {
public void run() {
try {
doDownloadTheFile(strPath);
} catch (Exception e) {
Log.e(TAG, e.getMessage(), e);
}
}
};
new Thread(r).start();
} catch (Exception e) {
e.printStackTrace();
}
}
private void doDownloadTheFile(String strPath) throws Exception {
Log.i(TAG, "getDataSource()");
if (!URLUtil.isNetworkUrl(strPath)) {
Log.i(TAG, "getDataSource() It's a wrong URL!");
} else {
URL myURL = new URL(strPath);
URLConnection conn = myURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
if (is == null) {
throw new RuntimeException("stream is null");
}
File myTempFile = File.createTempFile(fileNa, "." + fileEx);
currentTempFilePath = myTempFile.getAbsolutePath();
FileOutputStream fos = new FileOutputStream(myTempFile);
byte buf[] = new byte[128];
do {
int numread = is.read(buf);
if (numread <= 0) {
break;
}
fos.write(buf, 0, numread);
} while (true);
Log.i(TAG, "getDataSource() Download ok...");
dialog.cancel();
dialog.dismiss();
openFile(myTempFile);
try {
is.close();
} catch (Exception ex) {
Log.e(TAG, "getDataSource() error: " + ex.getMessage(), ex);
}
}
}
private void openFile(File f) {
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
String type = getMIMEType(f);
intent.setDataAndType(Uri.fromFile(f), type);
activity.startActivity(intent);
}
public void delFile() {
Log.i(TAG, "The TempFile(" + currentTempFilePath + ") was deleted.");
File myFile = new File(currentTempFilePath);
if (myFile.exists()) {
myFile.delete();
}
}
private String getMIMEType(File f) {
String type = "";
String fName = f.getName();
String end = fName
.substring(fName.lastIndexOf(".") + 1, fName.length())
.toLowerCase();
if (end.equals("m4a") || end.equals("mp3") || end.equals("mid")
|| end.equals("xmf") || end.equals("ogg") || end.equals("wav")) {
type = "audio";
} else if (end.equals("3gp") || end.equals("mp4")) {
type = "video";
} else if (end.equals("jpg") || end.equals("gif") || end.equals("png")
|| end.equals("jpeg") || end.equals("bmp")) {
type = "image";
} else if (end.equals("apk")) {
type = "application/vnd.android.package-archive";
} else {
type = "*";
}
if (end.equals("apk")) {
} else {
type += "/*";
}
return type;
}
}
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.util.Log;
import android.webkit.URLUtil;
import com.hiyo.game.pdk.activity.R;
/**
* Android AutoUpdate.
*
* lazybone/2010.08.20
*
* 1.Set apkUrl.
*
* 2.check().
*
* 3.add delFile() method in resume()\onPause().
*/
public class MyAutoUpdate {
public Activity activity = null;
public int versionCode = 0;
public String versionName = "";
private static final String TAG = "AutoUpdate";
private String currentFilePath = "";
private String currentTempFilePath = "";
private String fileEx = "";
private String fileNa = "";
private String strURL = "http://127.0.0.1:81/ApiDemos.apk";
private ProgressDialog dialog;
public MyAutoUpdate(Activity activity) {
this.activity = activity;
getCurrentVersion();
}
public void check() {
if (isNetworkAvailable(this.activity) == false) {
return;
}
if (true) {// Check version.
showUpdateDialog();
}
}
public static boolean isNetworkAvailable(Context ctx) {
try {
ConnectivityManager cm = (ConnectivityManager) ctx
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
return (info != null && info.isConnected());
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public void showUpdateDialog() {
@SuppressWarnings("unused")
AlertDialog alert = new AlertDialog.Builder(this.activity)
.setTitle("Title")
.setIcon(R.drawable.icon)
.setMessage("Update or not?")
.setPositiveButton("Update",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
downloadTheFile(strURL);
showWaitDialog();
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
dialog.cancel();
}
}).show();
}
public void showWaitDialog() {
dialog = new ProgressDialog(activity);
dialog.setMessage("Waitting for update...");
dialog.setIndeterminate(true);
dialog.setCancelable(true);
dialog.show();
}
public void getCurrentVersion() {
try {
PackageInfo info = activity.getPackageManager().getPackageInfo(
activity.getPackageName(), 0);
this.versionCode = info.versionCode;
this.versionName = info.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
private void downloadTheFile(final String strPath) {
fileEx = strURL.substring(strURL.lastIndexOf(".") + 1, strURL.length())
.toLowerCase();
fileNa = strURL.substring(strURL.lastIndexOf("/") + 1,
strURL.lastIndexOf("."));
try {
if (strPath.equals(currentFilePath)) {
doDownloadTheFile(strPath);
}
currentFilePath = strPath;
Runnable r = new Runnable() {
public void run() {
try {
doDownloadTheFile(strPath);
} catch (Exception e) {
Log.e(TAG, e.getMessage(), e);
}
}
};
new Thread(r).start();
} catch (Exception e) {
e.printStackTrace();
}
}
private void doDownloadTheFile(String strPath) throws Exception {
Log.i(TAG, "getDataSource()");
if (!URLUtil.isNetworkUrl(strPath)) {
Log.i(TAG, "getDataSource() It's a wrong URL!");
} else {
URL myURL = new URL(strPath);
URLConnection conn = myURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
if (is == null) {
throw new RuntimeException("stream is null");
}
File myTempFile = File.createTempFile(fileNa, "." + fileEx);
currentTempFilePath = myTempFile.getAbsolutePath();
FileOutputStream fos = new FileOutputStream(myTempFile);
byte buf[] = new byte[128];
do {
int numread = is.read(buf);
if (numread <= 0) {
break;
}
fos.write(buf, 0, numread);
} while (true);
Log.i(TAG, "getDataSource() Download ok...");
dialog.cancel();
dialog.dismiss();
openFile(myTempFile);
try {
is.close();
} catch (Exception ex) {
Log.e(TAG, "getDataSource() error: " + ex.getMessage(), ex);
}
}
}
private void openFile(File f) {
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
String type = getMIMEType(f);
intent.setDataAndType(Uri.fromFile(f), type);
activity.startActivity(intent);
}
public void delFile() {
Log.i(TAG, "The TempFile(" + currentTempFilePath + ") was deleted.");
File myFile = new File(currentTempFilePath);
if (myFile.exists()) {
myFile.delete();
}
}
private String getMIMEType(File f) {
String type = "";
String fName = f.getName();
String end = fName
.substring(fName.lastIndexOf(".") + 1, fName.length())
.toLowerCase();
if (end.equals("m4a") || end.equals("mp3") || end.equals("mid")
|| end.equals("xmf") || end.equals("ogg") || end.equals("wav")) {
type = "audio";
} else if (end.equals("3gp") || end.equals("mp4")) {
type = "video";
} else if (end.equals("jpg") || end.equals("gif") || end.equals("png")
|| end.equals("jpeg") || end.equals("bmp")) {
type = "image";
} else if (end.equals("apk")) {
type = "application/vnd.android.package-archive";
} else {
type = "*";
}
if (end.equals("apk")) {
} else {
type += "/*";
}
return type;
}
}
发表评论
-
android push
2011-11-16 15:24 1604所有技术的概要介绍,并讲解了android2.2的新功能C2D ... -
[Android UI界面] 怎么设置popupwindow动画效果?
2011-07-16 12:34 1116http://www.eoeandroid.com/threa ... -
android解析XML
2011-07-11 11:32 1847为移动设备构建 Java 应用程序 Michael ... -
对话框和浮动Activity
2011-07-06 12:07 953在Android中,我们可以通 ... -
升级android sdk时A folder failed to be renamed or moved 错误的解决
2011-06-28 09:22 1695Downloading Android SDK Tools, ... -
android push机制-C2DM
2011-06-27 16:54 1518http://bigcat.easymorse.com/?p= ... -
XML解析
2011-06-24 15:45 846HttpPost httpRequest=new HttpP ... -
android上传图片到服务器,求服务器那边和android的Activity的完整代码。
2011-06-22 12:30 3247服务器端servlet代码:public void doPos ... -
android HTTP 通信, XML 解析, 通过 Hander 实现异步消息处理 (1)
2011-06-08 16:44 1013介绍 在 Android 中与服务端做 HTTP 通信,解析 ... -
eclipse 中android中文doc配置
2011-05-13 14:39 957http://hi.baidu.com/huangbz321/ ... -
jesson.shen浅谈HTTP中实现UDP/TCP
2011-05-10 16:38 934http://350526.blog.51cto.com/34 ... -
android 网络编程
2011-05-04 19:54 775http://hi.baidu.com/lfcaolibin/ ... -
android解析xml文件的方式
2011-05-01 22:54 885http://hi.baidu.com/%B2%BD%C2%C ... -
android进程间通信:使用AIDL
2011-04-13 10:59 866http://blog.csdn.net/saintsword ... -
Android实现开机自动运行程序
2011-04-12 18:00 1122有些时候,应用需要在开机时就自动运行,例如某个自动从网上更新内 ... -
android 如何从sqlite读取数据到spinner下拉中显示
2011-04-12 14:56 5581import android.app.Activity; im ... -
Android的SharedPreferences保存与删除数据简单实例
2011-04-12 11:37 520281、创建SharedPreferences对象: Stri ... -
Android使用LayoutInflater动态加载布局和操作控件
2011-04-11 16:22 1000http://www.cnmsdn.com/html/2010 ... -
dialog
2011-04-08 18:32 852http://topic.csdn.net/u/2011031 ... -
Android NOtification 使用
2011-04-07 15:55 3842一、 Notification 简介 ...
相关推荐
本文将深入探讨Android版本转场动画的相关知识点,包括基本概念、使用方法以及Canvas和Timer在动画中的应用。 一、转场动画基础 1.1 动画类型:Android提供了多种类型的动画,包括帧动画(AnimationDrawable)、补...
随着Android Gradle Plugin的更新,从旧的`Android.mk`文件(Makefile系统)过渡到新的`Android.bp`文件( Blueprint语言)已经成为趋势。`Android.bp`提供了更为灵活和强大的模块定义方式,支持更高级别的抽象和...
在Android应用开发中,为了提供更高效的更新方式,开发者常常会使用增量更新技术。增量更新是一种只下载应用中改变部分的更新方式,相比于传统的全量更新,它显著减少了用户下载的数据量,提升了用户体验。本文将...
#### 二、Android版本与Linux Kernel版本对应关系 ##### 1. Astro (铁臂阿童木) - **Android系统版本**: Beta - **发布时间**: 2007年11月5日 - **Linux Kernel内核版本**: 未知 - **备注**: 作为面向开发者的软件...
10. **软件生命周期管理**:驱动程序的维护同样重要,包括版本控制、更新发布和bug修复,以适应新的Android版本和硬件平台。 总结来说,PL2303 USB转串口驱动程序在Android设备上的应用涉及到多个层面的技术,包括...
在本场景中,我们关注的是Android SDK的27版本,这对应于Android操作系统8.1.0,也称为Oreo。这个版本的SDK对开发者来说至关重要,因为它包含了构建针对Android 8.1应用所必需的组件。 首先,Android SDK Platform...
记得在Android Studio中更新构建目标和最低支持版本,以确保应用能够在Android 8.0及更高版本上正常运行。同时,由于标签中提到了“java apache”,开发者可能还需要关注如何在Android 8.0环境中使用Apache相关的库...
AndroidKiller 1.3.1 2021更新版, 更新apktools2.5.1 更新dex2jar版本, 更新jd-gui1.6.6 ,自动将多个dex转成jar, 解决反编译工程卡死问题.
1. 检查兼容性:确保设备型号支持Android 7.0更新,并且当前系统版本可以升级。 2. 备份数据:在升级前,建议备份重要数据,以防意外丢失。 3. 下载更新:通过官方渠道获取更新文件,例如通过设置中的“系统更新”...
- 在多种设备和Android版本上进行测试,确保兼容性和性能。 - 根据用户反馈和性能分析结果进行优化,比如提高响应速度、减少资源消耗等。 综上所述,“android 仿音量旋转按钮”的实现涉及到Android自定义View的...
总之,"android2.3 文字转语音 4.0不可用"这个问题可能涉及Android版本之间的兼容性、特定设备的TTS引擎以及开发者如何在应用中正确集成和使用TTS服务。解决这类问题通常需要结合设备特定的更新、代码调整和用户端的...
在这个案例中,我们将使用视图动画,因为它更简单且适用于早期版本的Android系统。视图动画包括补间动画(Tween Animation)和帧动画(Frame Animation),其中补间动画常用于实现旋转、移动、缩放和透明度变化等...
"Android版本的圆形旋转菜单"就是一个很好的示例,它提供了一种新颖且有趣的交互方式。这种菜单以圆形布局呈现,通过旋转动作来展开或收起选项,既美观又实用。下面我们将深入探讨这个菜单的实现方式以及相关技术点...
本文将深入探讨GreenDao3的相关使用以及如何进行版本升级更新。 **一、GreenDao简介** GreenDao是一个强大的库,它允许开发者通过简单的Java对象(POJOs)与SQLite数据库进行交互。它的核心特性包括: 1. **快速...
增量更新是Android应用开发中一种高效且节省流量的更新方式,尤其在移动网络环境不稳定或者数据流量有限的情况下显得尤为重要。这种技术的核心理念是通过对比已安装应用的旧版本与服务器上的新版本,找出两者的差异...
下面将详细讲解如何在Android中进行数据库表结构的更新,以及如何处理旧版本程序中表的接口添加、删减字段的问题。 1. **创建SQLite数据库** - Android使用SQLite作为默认的本地数据库系统。首先,我们需要创建一...
在Android 8.0系统中,应用程序的更新和文件分享是两个重要的功能,它们涉及到用户交互、系统安全以及用户体验等多个方面。以下将详细介绍这两个知识点。 首先,我们来谈谈"Android 8.0 APP更新"。Android 8.0,又...
在实际开发中,为了支持低版本Android系统,我们通常会使用Support Library中的android.support.v4.animation库来实现属性动画。同时,考虑到性能和流畅性,需要注意控制动画的执行时间和帧率,避免过度复杂的动画...
本篇将深入探讨“Android数据库Realm版本更新”的主题,包括 Realm 的基本操作,如增删改查,以及如何在版本更新时进行数据迁移。 首先,让我们了解 Realm 的基础操作。Realm 提供了简洁的 API 来执行常见的数据库...
这个自己写的一个android 平台下移植ffmpeg项目完成的一个小的功能。ffmpeg版本0.8.8。将MP3转码为wav格式,转换前可设置要转换的采样率,并实时更新转换的进度。运行前请在sd卡下建立一个test文件夹,将要转化的MP3...