zoukankan      html  css  js  c++  java
  • Android实现应用下载并自动安装apk包

    安装:

     

    1
    2
    3
    4
    5
    String str = "/CanavaCancel.apk";
    String fileName = Environment.getExternalStorageDirectory() + str;
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");
    startActivity(intent);

     

    卸载:

     

    1
    2
    3
    Uri packageURI = Uri.parse("package:com.demo.CanavaCancel");  
    Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);  
    startActivity(uninstallIntent);

     

    Environment拥有一些可以获取环境变量的方法 
    package:com.demo.CanavaCancel 这个形式是 package:程序完整的路径 (包名+程序名).

    //下载apk程序代码

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    protected File downLoadFile(String httpUrl) {
                    // TODO Auto-generated method stub
                    final String fileName = "updata.apk";
                    File tmpFile = new File("/sdcard/update");
                    if (!tmpFile.exists()) {
                            tmpFile.mkdir();
                    }
                    final File file = new File("/sdcard/update/" + fileName);
     
                    try {
                            URL url = new URL(httpUrl);
                            try {
                                    HttpURLConnection conn = (HttpURLConnection) url
                                                    .openConnection();
                                    InputStream is = conn.getInputStream();
                                    FileOutputStream fos = new FileOutputStream(file);
                                    byte[] buf = new byte[256];
                                    conn.connect();
                                    double count = 0;
                                    if (conn.getResponseCode() >= 400) {
                                            Toast.makeText(Main.this"连接超时", Toast.LENGTH_SHORT)
                                                            .show();
                                    else {
                                            while (count <= 100) {
                                                    if (is != null) {
                                                            int numRead = is.read(buf);
                                                            if (numRead <= 0) {
                                                                    break;
                                                            else {
                                                                    fos.write(buf, 0, numRead);
                                                            }
     
                                                    else {
                                                            break;
                                                    }
     
                                            }
                                    }
     
                                    conn.disconnect();
                                    fos.close();
                                    is.close();
                            catch (IOException e) {
                                    // TODO Auto-generated catch block
     
                                    e.printStackTrace();
                            }
                    catch (MalformedURLException e) {
                            // TODO Auto-generated catch block
     
                            e.printStackTrace();
                    }
     
                    return file;
            }
    //打开APK程序代码
     
    private void openFile(File file) {
                    // TODO Auto-generated method stub
                    Log.e("OpenFile", file.getName());
                    Intent intent = new Intent();
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent.setAction(android.content.Intent.ACTION_VIEW);
                    intent.setDataAndType(Uri.fromFile(file),
                                    "application/vnd.android.package-archive");
                    startActivity(intent);
            }
  • 相关阅读:
    linux 消息队列
    linux 共享内存
    多线程(八)~ThreadLocal、InheritableThreadLocal的使用
    多线程(四)~数据操作的原子性,使用原子性操作AutomicInteger替换非原子性的i++的操作
    多线程(五)~ wait/notify机制(等待/通知)
    多线程(六)~通过管道进行线程之间的通信:字节流、字符流
    多线程(二)~Thread类相关的API介绍
    多线程(三)~多线程中数据的可见性-volatile关键字
    多线程(一)~基础介绍,简单demo实现
    haproxy学习——安装(一)
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4481568.html
Copyright © 2011-2022 走看看