加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Android 中静默安装实现

发布时间:2020-12-14 23:24:32 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 ????2.通过命令式的方式直接进行安装APK。在使用 Android Studio debug安装的时候可以看到控制台上的命令 import android.content.Context;import and

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

????2.通过命令式的方式直接进行安装APK。在使用 Android Studio debug安装的时候可以看到控制台上的命令
 
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.util.Log;
 
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
 
/**
 * <p>名称:com.singno.VersionManager</p>
 * <p>描述:</p>
 * <pre>
 *  APK版本管理器
 *  版本检查,版本更新等
 * </pre>
 *
 * @author 鲍建明
 * @version 2.1.0
 * @date 2015/4/30/16:28
 */
public class VersionManager {
 
    private static final String TAG = VersionManager.class.getName();
 
    private Context context;
 
    public VersionManager(Context context){
        this.context = context;
    }
 
 
    /**
     * 检查版本号是否相同
     * @param versionCode
     * @return
     */
    public boolean isSameVersion(int versionCode){
        return getCurrentVersion() != versionCode ? Boolean.FALSE : Boolean.TRUE;
    }
 
    /**
     * 静默安装,安装之前必须要获取到ROOT权限
     * 原理:1.先获取到ROOT权限
     *  2.在通过命令的方式直接安装APK
     * @return
     */
    public boolean silenceInstall(File file){
        Process process = null;
        OutputStream out = null;
        DataOutputStream dataOutputStream = null;
        try {
            process = Runtime.getRuntime().exec("su");
            out = process.getOutputStream();
            dataOutputStream = new DataOutputStream(out);
            dataOutputStream.writeBytes("chmod 777 " + file.getPath() + "n");
            dataOutputStream.writeBytes("LD_LIBRARY_PATH=/vendor/lib:/system/lib pm install -r " + file.getPath());
            // 提交命令
            dataOutputStream.flush();
            int value = process.waitFor();
            if( value == 0){
                return Boolean.TRUE;
            }
            return Boolean.FALSE;
 
        } catch (Exception e) {
            e.printStackTrace();
            return Boolean.FALSE;
        }finally{
            try {
                if( dataOutputStream != null ){
                    dataOutputStream.close();
                }
                if( out != null ){
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
 
    /**
     * 普通的安装应用方式
     * @param file  安装包文件
     */
    public void installApk(File file){
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.setDataAndType(Uri.parse("file://" + file.toString()),"application/vnd.android.package-archive");
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        this.context.startActivity(i);
    }
 
    /**
     * 获取服务端中的版本号
     * 这个自行完成
     * @return
     */
    public int getHttpVersion(){
        return 0;
    }
 
 
    /**
     * 获取当前APK的版本号
     * @return 当前APK的版本号
     */
    public int getCurrentVersion(){
        try {
            return this.context.getPackageManager().getPackageInfo(this.context.getPackageName(),0).versionCode;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            Log.e(TAG,"获取版本号失败");
            return 0;
        }
    }
 
 
    /**
     * 下载APK
     */
    public void downApk(){
        new Thread(new DownApk()).start();
    }
 
    /**
     * 显示下载进度提示框
     */
    private void showDownloadDialog(){
 
    }
 
    /**
     * 显示软件更新提示对话框
     */
    private void showNoticeDialog(){
 
    }
 
 
    /**
     * 下载APk的类
     */
    class DownApk implements Runnable{
 
        @Override
        public void run() {
 
        }
    }
 
}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读