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;
}
}