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系统。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)