系统目录APK更新——权限问题

时间:2023-03-09 15:18:47
系统目录APK更新——权限问题

package com.example.wx;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.ProgressBar;

public class MainActivity extends Activity {
    /* 进度条与通知ui刷新的handler和msg常量 */
    private ProgressBar mProgress;
    private static final int DOWN_UPDATE = 1;
   
    private static final int DOWN_OVER = 2;
   
    private int progress;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mProgress = (ProgressBar)findViewById(R.id.pd);
        new updata().start();
    }

class updata extends Thread{
     public void run() {
   try {
    URL url = new URL("http://softfile.3g.qq.com:8080/msoft/179/24659/43549/qq_hd_mini_1.4.apk");
   
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    conn.connect();
    int length = conn.getContentLength();
    InputStream is = conn.getInputStream();
    
    File file = new File("/sdcard/updatedemo/");
    if(!file.exists()){
     file.mkdir();
    }
    //String apkFile = "/sdcard/updatedemo/"+"test.apk";
    //File ApkFile = new File(apkFile);
    //FileOutputStream fos = new FileOutputStream(ApkFile);
    FileOutputStream fos = openFileOutput("test.apk", MODE_WORLD_READABLE);
    int count = 0;
    byte[] buffer = new byte[1024];
    int mylength = 0;
    Log.d("开始下载","开始下载");
    while ((mylength = is.read(buffer)) != -1) {
     fos.write(buffer,0,mylength);
    }
    fos.close();
    is.close();
    mHandler.sendEmptyMessage(DOWN_OVER);

} catch (MalformedURLException e) {
    e.printStackTrace();
   } catch(IOException e){
    e.printStackTrace();
   }
   
  }
    }
    private void installApk(){
  File apkfile = new File(getFilesDir(), "test.apk");
  Log.d("文件路径", apkfile.toString());
        if (!apkfile.exists()) {
            //return;
            Log.d("存儲失敗", "存储失败");
            return;
        }   
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.setDataAndType(Uri.fromFile(apkfile), "application/vnd.android.package-archive");
        this.startActivity(i);
 
 }
   
    private Handler mHandler = new Handler(){
     public void handleMessage(Message msg) {
      switch (msg.what) {
   case DOWN_UPDATE:
    
    break;
   case DOWN_OVER:
    mProgress.setVisibility(View.GONE);
    installApk();
    break;
   default:
    break;
   }
     };
    };
   
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}