相关资料:

1.群号 383675978

2.运行时提示"connection closed gracefully"错误原因与解决 http://www.delphifans.com/InfoView/Article_4588.html

3.编译时提示"[Exec Error] The command ..... exited with code 1."错误原因不明,解决方法删除androidSDK,下载新版本的,引入新版本的SDK。

实例源码:

 unit Unit1;

 interface

 uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.Controls.Presentation, FMX.StdCtrls, FMX.Objects,
System.IOUtils, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
Androidapi.Jni.Net,//TJnet_Uri使用
Androidapi.JNI.JavaTypes, //Jfile使用
Androidapi.JNI.GraphicsContentViewText,//JIntent使用
Androidapi.Helpers,//stringtojstring使用
IdHTTP;//TPath使用 type
TForm1 = class(TForm)
Label1: TLabel;
ProgressBar1: TProgressBar;
Label2: TLabel;
Button1: TButton;
IdHTTP1: TIdHTTP;
procedure Button1Click(Sender: TObject);
procedure IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Int64);
procedure IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
AWorkCountMax: Int64);
procedure IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
private
{ Private declarations }
isDown:Boolean;
function DownFilePath: string;
public
{ Public declarations }
end; const
FileName = 'test.apk'; var
Form1: TForm1; implementation {$R *.fmx}
{$R *.NmXhdpiPh.fmx ANDROID} procedure TForm1.Button1Click(Sender: TObject);
var
sURLPath,sFilePath: string;
oFile: TFileStream;
begin
isDown := True;
sFilePath := DownFilePath + FileName;
if FileExists(sFilePath) then //判断以前文件是否存在
DeleteFile(sFilePath); // sURLPath:= 'http://bcscdn.baidu.com/netdisk/BaiduYun_7.12.1.apk';//文件下载地址(用百度云测试了)
// 本来想用百度云的,我艹,不知道为什么百度云下载着,就提示“connection closed gracefully”
sURLPath:= 'http://m.down.sandai.net/MobileThunder/Android_5.15.2.3820/XLWXguanwang.apk';//文件下载地址(用百度云测试了) oFile := TFileStream.Create(sFilePath, fmCreate); //文件下载后保存的路径
try
ProgressBar1.Value := ;
IdHTTP1.Get(sURLPath, oFile);
except
end;
oFile.Free;
end; function TForm1.DownFilePath: string;
begin
Result := TPath.GetDownloadsPath + PathDelim;
end; procedure TForm1.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Int64);
begin
ProgressBar1.Value := AWorkCount;
end; procedure TForm1.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
AWorkCountMax: Int64);
begin
ProgressBar1.Value := AWorkCountMax;
end; procedure TForm1.IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
{$IFDEF ANDROID}
Var
oFile: Jfile;
oIntent: JIntent;
{$ENDIF}
begin
{$IFDEF ANDROID}
//下载完成后自动安装
if isDown then
begin
Try
oFile := TJfile.JavaClass.init(stringtojstring(DownFilePath), stringtojstring(FileName));
oIntent := TJIntent.Create;
oIntent.setAction(TJIntent.JavaClass.ACTION_VIEW);
oIntent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
oIntent.setDataAndType(TJnet_Uri.JavaClass.fromFile(oFile), StringToJString('application/vnd.android.package-archive'));
SharedActivityContext.startActivity(oIntent);
Except
End;
end;
{$ENDIF}
end; end.

Android实例-IdHTTP下载(并实现自动安装)(XE10+小米2)的更多相关文章

  1. 下载app后自动安装程序

    其实很简单,只需要几行代码就好了,首先要到服务器下载apk,然后才能安装,当然不是傻子应该都知道,我这里用到的是Httputils去下载, 这里需要一些权限 <uses-permission a ...

  2. Android实例-如何将文件打包到安装文件(XE8+小米2)

    结果: 1.文件名支持英文字母.数字,不支持中文,大小写敏感. 2.文件最好放在根目录下,或是子目录下,如果放在根目外,根目录改名后,找不到文件. 3.打开Project->Deployment ...

  3. Android实例-拍摄和分享照片、分享文本(XE8+小米2)

    结果: 1.分享文本不好使,原因不明.有大神了解的,请M我,在此十分感谢. 2.如果想支持图片编辑,将Action事件的Editable改为True. 相关资料: 官网地址:http://docwik ...

  4. Android实例-从照相机或图库获取照片(XE8+小米2)

    结果: 1.如果要取本地相册的话,小米手机要注意一下,不能取网络相册. 操作: 1.两个 TButton (Button1 和 Button2) , 一个 TActionList(ActionList ...

  5. Android 自己实现更新下载自动安装

    1.一些公司开发完一款App之后可能并不会去上架App商店,但事后期也需要定时进行维护更新,所以会选择把打包好的apk 发布到自己的服务器,然后在数据库建一个版本号的表,然后剩下的就交给你androi ...

  6. android 版本更新适配8.0,解决8.0手机无法更新自动安装apk

    随着android 7.0的普及android 8.0的也逐渐流行起来,那么google对权限方面又有了新的修改.而且我发现在android8.0中除了一些bug,比如说:在小米6(Android 8 ...

  7. Android Studio的下载和安装教程(从ADT到AS)

    之前一直使用的是Android development tools(简称ADT),后来说是google对ADT不再提供支持,然后一直在考虑是否把自己电脑换成Android Studio(简称AS),从 ...

  8. 下载更新文件后,调用安装器自动安装apk文件

    在更新操作时,下载新apk之后,往往需要自动安装新apk,用以下代码即可安装下载在本地的apk文件(apkFile) Intent intent = new Intent(); intent.setA ...

  9. ubuntu上面安装eclipse android到adt下载方法

    如果自动安装有问题的话,就需要手动安装,其实是差不多的,唯一不同的就是手动下载ADT插件包,http://dl.google.com/android/ADT-0.9.6.zip ,可以下载到. 版本号 ...

随机推荐

  1. jquery中获取相邻元素相关的命令:next()、prev()和siblings()

    jquery里我们要获取某个元素的相邻元素时,可以用到的命令有三个: next():用来获取下一个同辈元素. prev():用来获取上一个同辈元素. siblings():用来获取所有的同辈元素. 下 ...

  2. 理解Vue的计算属性

    计算属性是一个很邪门的东西,只要在它的函数里引用了 data 中的某个属性,当这个属性发生变化时,函数仿佛可以嗅探到这个变化,并自动重新执行. 上述代码会源源不断的打印出 b 的值.如果希望 a 依赖 ...

  3. ubuntu创建sudo 用户

    The sudo command provides a mechanism for granting administrator privileges, ordinarily only availab ...

  4. python从数据库获取全量数据的方法

    python从数据库获取全量数据的方法 学习了:https://blog.csdn.net/lom9357bye/article/details/79503658 原文膜拜: import psyco ...

  5. [ES6] 08. Destructuring Assignment -- 1

    Here is the way you get value from an object: var obj = { color: "blue" } console.log(obj. ...

  6. 安卓新闻client笔记积累

    做一个项目,假设有第三方的框架的话.就会简单非常多.如今看的这个新闻client就用到了很多框架,还有非常多知识点,放在这里,记录下来. (1)Android Volley 之自己定义Request ...

  7. Java线程详细监控和其dump的分析使用—-分析Java性能瓶颈

    转载:https://www.cnblogs.com/firstdream/p/8109352.html 这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结: l ...

  8. java实现快速排序算法

    1.算法概念. 快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.2.算法思想. 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据 ...

  9. python 静态成员变量

    python 静态成员变量 python 也可以定义静态成员变量,就是类的变量. 注意python的静态成员变量只能通过 类.变量名 的形式获取 class A: a1 = 0 def __init_ ...

  10. js取消radio选中 反选

    var radio=document.createElement("input");radio.type="radio";radio.onclick = fun ...