我有一个私有的Android应用,而不是谷歌市场或谷歌播放。 apk文件托管在私人Web服务器上,并且还有一个URL,移动设备可以执行POST请求,以便检查是否有更新的版本。
现在,如果有更新的版本,我只会向用户显示一个“升级”按钮。 onclick监听器执行此操作:
final View.OnClickListener upgradeButton_OnClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
String url = "https://example.com/android-app/app-release.apk";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
}
};
......但这并不理想。如果当我点击下载apk文件的按钮并且我被带到应用程序安装程序屏幕,其中显示“安装是/否”,那将是很好的。我只是不知道该怎么做。
我一直在互联网上寻找一种方法来做到这一点,我没有看到一个确凿的答案。有人可以指点我一个包含所有步骤的教程吗?我知道大多数人可能会使用谷歌市场或谷歌播放,但我不这样做,而且很难搞清楚这一点。
编辑1 -----------------------------------------
现在我在onclick监听器中有这个:
final View.OnClickListener upgradeButton_OnClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
int permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if(permissionCheck == PackageManager.PERMISSION_GRANTED){
DownloadManager.Request request = new DownloadManager.Request(Uri.parse("https://example.com/android-app/app-release.apk"));
request.setTitle("This App Upgrade.");
request.setDescription("File is being downloaded ...");
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "app-release.apk" );
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
registerReceiver(onDownloadComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
manager.enqueue(request);
}
}
};
而且:
BroadcastReceiver onDownloadComplete = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
intent.setDataAndType(Uri.parse(Environment.DIRECTORY_DOWNLOADS + "app-release.apk"),
"application/vnd.android.package-archive");
startActivity(intent);
}
};
我在尝试下载时遇到错误:
java.lang.SecurityException: No permission to write to /storage/emulated/0/Download/app-release.apk: Neither user 10062 nor current process has android.permission.WRITE_EXTERNAL_STORAGE.
这就是我尝试实现permissionCheck的原因,但现在当我点击按钮时根本没有任何事情发生。
答案 0 :(得分:0)
是的,这是可能的。对于某些“IF”:电话必须已植根并启用第三方源安装。
基本上,您必须在下载文件后调用pm install
Android的命令。
这是你可以下载文件的方法: Download a file with Android, and showing the progress in a ProgressDialog
这篇文章只是pm安装的一个例子
Process process = null;
try
{
process = Runtime.getRuntime().exec("su");
DataOutputStream dataOutputStream=new DataOutputStream(process.getOutputStream());
String cmd="pm install /sdcard/LatestUpdate.apk";
dataOutputStream.writeBytes(cmd+"\n");
}
catch (IOException e)
{
e.printStackTrace();
}
如果没有root,您可以尝试调用新的Intent as
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(filePath)),"application/vnd.android.package-archive");
startActivity(intent);
它将显示应用程序安装对话框。但仍然必须从未知来源安装