android 怎么实现应用内更新

android 怎么实现应用内更新,第1张

android 实现应用内更新的方法为:

1、新建一个Android工程命名为:UpdateDemo。

2、新建一个UpdateManager.java类,负责软件更新功能桥正仿模敏纤块,代码如下:

package com.tutor.update

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.app.AlertDialog

import android.app.Dialog

import android.app.AlertDialog.Builder

import android.content.Context

import android.content.DialogInterface

import android.content.Intent

import android.content.DialogInterface.OnClickListener

import android.net.Uri

import android.os.Handler

import android.os.Message

import android.view.LayoutInflater

import android.view.View

import android.widget.ProgressBar

public class UpdateManager {

private Context mContext

//提示语

private String updateMsg = "有最新的软件包哦,亲快下载吧~"

//返回的安装包url

private String apkUrl = "http://softfile.3g.qq.com:8080/msoft/179/24659/43549/qq_hd_mini_1.4.apk"

private Dialog noticeDialog

private Dialog downloadDialog

/* 下载包安装路径 */

private static final String savePath = "/sdcard/updatedemo/"

private static final String saveFileName = savePath + "UpdateDemoRelease.apk"

/* 进度条与通知ui刷新的handler和msg常量 */

private ProgressBar mProgress

private static final int DOWN_UPDATE = 1

private static final int DOWN_OVER = 2

private int progress

private Thread downLoadThread

private boolean interceptFlag = false

private Handler mHandler = new Handler(){

public void handleMessage(Message msg) {

switch (msg.what) {

case DOWN_UPDATE:

mProgress.setProgress(progress)

break

case DOWN_OVER:

installApk()

break

default:

break

}

}

}

public UpdateManager(Context context) {

this.mContext = context

}

//外清斗部接口让主Activity调用

public void checkUpdateInfo(){

showNoticeDialog()

}

private void showNoticeDialog(){

AlertDialog.Builder builder = new Builder(mContext)

builder.setTitle("软件版本更新")

builder.setMessage(updateMsg)

builder.setPositiveButton("下载", new OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss()

showDownloadDialog()

}

})

builder.setNegativeButton("以后再说", new OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss()

}

})

noticeDialog = builder.create()

noticeDialog.show()

}

private void showDownloadDialog(){

AlertDialog.Builder builder = new Builder(mContext)

builder.setTitle("软件版本更新")

final LayoutInflater inflater = LayoutInflater.from(mContext)

View v = inflater.inflate(R.layout.progress, null)

mProgress = (ProgressBar)v.findViewById(R.id.progress)

builder.setView(v)

builder.setNegativeButton("取消", new OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss()

interceptFlag = true

}

})

downloadDialog = builder.create()

downloadDialog.show()

downloadApk()

}

private Runnable mdownApkRunnable = new Runnable() {

@Override

public void run() {

try {

URL url = new URL(apkUrl)

HttpURLConnection conn = (HttpURLConnection)url.openConnection()

conn.connect()

int length = conn.getContentLength()

InputStream is = conn.getInputStream()

File file = new File(savePath)

if(!file.exists()){

file.mkdir()

}

String apkFile = saveFileName

File ApkFile = new File(apkFile)

FileOutputStream fos = new FileOutputStream(ApkFile)

int count = 0

byte buf[] = new byte[1024]

do{

int numread = is.read(buf)

count += numread

progress =(int)(((float)count / length) * 100)

//更新进度

mHandler.sendEmptyMessage(DOWN_UPDATE)

if(numread <= 0){

//下载完成通知安装

mHandler.sendEmptyMessage(DOWN_OVER)

break

}

fos.write(buf,0,numread)

}while(!interceptFlag)//点击取消就停止下载.

fos.close()

is.close()

} catch (MalformedURLException e) {

e.printStackTrace()

} catch(IOException e){

e.printStackTrace()

}

}

}

/**

* 下载apk

* @param url

*/

private void downloadApk(){

downLoadThread = new Thread(mdownApkRunnable)

downLoadThread.start()

}

/**

* 安装apk

* @param url

*/

private void installApk(){

File apkfile = new File(saveFileName)

if (!apkfile.exists()) {

return

}

Intent i = new Intent(Intent.ACTION_VIEW)

i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive")

mContext.startActivity(i)

}

}

第三步:在MainActivity.java也就是主Activity调用,代码如下:

package com.tutor.update

import android.app.Activity

import android.os.Bundle

public class MainAcitivity extends Activity {

private UpdateManager mUpdateManager

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState)

setContentView(R.layout.main)

//这里来检测版本是否需要更新

mUpdateManager = new UpdateManager(this)

mUpdateManager.checkUpdateInfo()

}

}

3、添加程序所用的资源与权限:

下载的时候用到了ProgressBar,所以事先写了一个progress.xml布局文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

<ProgressBar

android:id="@+id/progress"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

style="?android:attr/progressBarStyleHorizontal"

/>

</LinearLayout>

4、运行查看。

首先,先了解上面的信息,这些信息我们统称为“注入"。

意思是:注入代码到我们需要的软件中。

看右边的图片,这是一款安卓应用注入器,也是今天的主角,现在看的话,是一片空白,因为我们还没加入我们想要注入的应用程序。

(第一次进入会有应用功能介绍)

要让程序兼容安卓11运行,首先需要检查程序是否支持安卓11,如果支持,可以弯此耐直接在华为手机上安装使用;如果不支持,则需要对程序进行升级,以支持安扒链卓11系统。具体步骤如下:

1.查看程序是否支持安卓11:可以在应用商店中搜索该程序,查看其是否支持安卓11系统;

2.更新程序:如果程序不支持安卓11,可以在应用商店中搜索更新,或者在程序官网下载最新版本;

3.安装程序:埋春安装完成后,重启手机,即可使用安卓11系统中的该程序。

此外,还可以通过查看程序的更新日志来了解程序是否支持安卓11,以及更新内容,以便更好地兼容安卓11系统。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12479102.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存