网络下载apk自动安装小例子

来源:互联网 发布:阿里云虚拟主机的带宽 编辑:程序博客网 时间:2024/04/29 15:41
package feng.f8_6.activity;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.os.Message;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class HttpActivity extends Activity {private Button btn;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);btn = (Button) findViewById(R.id.button1);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {new Thread() {public void run() {// 地址网上可用哦String path = "http://res.neng.com/res/apk_sp/20120803/8124_com.mobi.filemanager.activity_163508.apk";//String path = "http://192.168.1.62:8080/MyHttpTest.apk";try {URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();if (HttpURLConnection.HTTP_OK != conn.getResponseCode()) {Message message = Message.obtain();message.what = 1;handler.sendMessage(message);} else {if (Environment.getExternalStorageState().equals(Environment.MEDIA_UNMOUNTED)) { Message message=Message.obtain(); message.what=2; handler.sendMessage(message);} else {// System.out.println("获取信息的长度:"+conn.getContentLength());File file = new File(Environment.getExternalStorageDirectory()+ "/feng");if (!file.exists()) {file.mkdir();}// System.out.println("file.getPath():"// + file.getPath());// System.out.println("getContentLength:"// + conn.getContentLength());File cfile = new File(file.getPath(),"activity_163508.apk");if (!cfile.exists()) {cfile.createNewFile();}InputStream is = conn.getInputStream();FileOutputStream os = new FileOutputStream(cfile);byte[] buffer = new byte[2048];int a=0;while ((a=is.read(buffer)) != -1) {os.write(buffer, 0, a);}//System.out.println("cfile.getName()"+cfile.getName());is.close();os.flush();os.close();Bundle bundle=new Bundle();Message message=Message.obtain();message.what=3;bundle.putString("msg", cfile.getAbsolutePath());message.setData(bundle);handler.sendMessage(message);}}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}};}.start();}});}private void installAPK(String fileName){File file =new File(fileName);if(!file.exists()){return;}Intent intent=new Intent();intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setAction(Intent.ACTION_VIEW);intent.setDataAndType(Uri.parse("file://"+file.toString()), "application/vnd.android.package-archive");startActivity(intent);}Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {switch (msg.what) {case 1:Toast.makeText(getApplicationContext(), "网络不通",Toast.LENGTH_SHORT).show();break;case 2: Toast.makeText(getApplicationContext(), "没有SD卡", Toast.LENGTH_SHORT).show(); break;case 3:Bundle bundle = msg.getData();String fileName = bundle.getString("msg");installAPK(fileName);break;default:break;}};};@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}}<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentTop="true"        android:layout_marginLeft="43dp"        android:layout_marginTop="19dp"        android:text="Button" /></RelativeLayout>

原创粉丝点击