Android自動オンラインアップグレード
19205 ワード
まず、実行環境についてお話しします.android 2.3テスト(メインスレッドhttpリクエスト)、tomcat 7.0サーバとして
tomca構成:
Webappsの下のrootフォルダの下に2つのファイルが置かれています.1つはapkバージョン情報txtファイル(もちろんservletでjsonを返すこともできます)、1つは新しいapkのファイル(v 2.0)です.
android構成:
まず、機子が実行するのはapkがv 1である.0バージョン、サーバのv 2.バージョン0
アクセス権構成(ネットワークとsdカード書き込み):
次の方法は、ネットワークのいくつかのツール方法です.
1.httpgetリクエスト、inputstreamを返します
2.新しいapkの情報を取得する
3.apkのダウンロード
次はActivity
tomca構成:
Webappsの下のrootフォルダの下に2つのファイルが置かれています.1つはapkバージョン情報txtファイル(もちろんservletでjsonを返すこともできます)、1つは新しいapkのファイル(v 2.0)です.
//install.txt
1 versioncode=2
2 url=http://192.168.1.131/android_apk_install.apk
android構成:
まず、機子が実行するのはapkがv 1である.0バージョン、サーバのv 2.バージョン0
アクセス権構成(ネットワークとsdカード書き込み):
1 <uses-permission android:name="android.permission.INTERNET" />
2 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
次の方法は、ネットワークのいくつかのツール方法です.
1.httpgetリクエスト、inputstreamを返します
1 public static InputStream getDataByHttpGet(String url) {
2 InputStream inputStream = null;
3 HttpGet httpGet = new HttpGet(url);
4 HttpClient httpClient = new DefaultHttpClient();
5 try {
6 HttpResponse response = httpClient.execute(httpGet);
7 int code = response.getStatusLine().getStatusCode();
8 if (code != 200) {
9 return null;
10 }
11 HttpEntity entity = response.getEntity();
12 inputStream = entity.getContent();
13 } catch (Exception e) {
14 e.printStackTrace();
15 }
16 return inputStream;
17 }
2.新しいapkの情報を取得する
1 public static Hashtable<String, String> getAPKInstallContent(String path) {
2 InputStream inputStream = getDataByHttpGet(path);
3 Hashtable<String, String> hashtable = new Hashtable<String, String>();
4 Properties properties = new Properties();
5 if (inputStream != null) {
6 try {
7 properties.load(inputStream);
8 Set<Entry<Object, Object>> set = properties.entrySet();
9 for (Entry<Object, Object> entry : set) {
10 hashtable.put(entry.getKey().toString(), entry.getValue()
11 .toString());
12 }
13 } catch (IOException e) {
14 e.printStackTrace();
15 } finally {
16 if (inputStream != null) {
17 try {
18 inputStream.close();
19 } catch (IOException e) {
20 e.printStackTrace();
21 }
22 }
23 }
24 }
25 return hashtable;
26 }
3.apkのダウンロード
1 public static boolean downloadApk(String url) {
2 boolean flag = false;
3 InputStream inputStream = getDataByHttpGet(url);
4 File sd_file = Environment.getExternalStorageDirectory();
5 File apk_file = new File(sd_file, "android_installapk.apk");
6 OutputStream outputStream = null;
7 try {
8 outputStream = new FileOutputStream(apk_file);
9 byte data[] = new byte[1024];
10 int len = 0;
11 while ((len = inputStream.read(data)) != -1) {
12 outputStream.write(data, 0, len);
13 }
14 flag = true;
15 } catch (Exception e) {
16 e.printStackTrace();
17 }finally{
18 if (inputStream != null) {
19 try {
20 inputStream.close();
21 } catch (IOException e) {
22 e.printStackTrace();
23 }
24 }
25 if (outputStream != null) {
26 try {
27 outputStream.close();
28 } catch (IOException e) {
29 e.printStackTrace();
30 }
31 }
32 }
33 return flag;
34 }
次はActivity
public class MainActivity extends Activity {
private String url = "http://192.168.1.131/install.txt";
private String packageName;
private PackageManager packageManager;
private PackageInfo packageInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Hashtable<String, String> hashtable = HttpUtils.getApkInfo(url);
packageName = getPackageName();
packageManager = getPackageManager();
try {
packageInfo = packageManager.getPackageInfo(packageName,
PackageManager.GET_ACTIVITIES);
String str1 = hashtable.get("versioncode");
int str2 = packageInfo.versionCode;
System.out.println(" :" + str1 + "||" + " :" + str2);
if (!String.valueOf(str2).equals(str1)) {
new Builder(MainActivity.this).setTitle(" !")
.setMessage(" , ?")
.setPositiveButton(" ", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
boolean flag = HttpUtils.downloadApk(hashtable
.get("url"));
if (flag) {
System.out.println(" !");
Uri uri = Uri
.fromFile(new File(
"/mnt/sdcard/android_installapk.apk"));
Intent intent = new Intent(
Intent.ACTION_VIEW);
intent.setDataAndType(uri,
"application/vnd.android.package-archive");
startActivity(intent);
} else {
System.out.println(" , ");
}
}
}).setNegativeButton(" ", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
}
}).create().show();
}
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
}