相关资料:

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. python微信公众号开发学习记录

    网上有很多微信公众号的开发教程,但是都是好几年前的了,而且很多都是抄袭其他人的,内容几乎一模一样.真的无语了.只好自己总结一下开发的一些简单流程. 一先去注册个微信公众号,这个就不详细说了, 二登录后 ...

  2. What is required for a successful backup of all files during hoi backup?

    There is a typo in the body of this question. It should be "Hot" instead of "hoi" ...

  3. 深度增强学习--DPPO

    PPO DPPO介绍 PPO实现 代码DPPO

  4. http://my.oschina.net/China2012/blog/178655

    http://my.oschina.net/China2012/blog/178655 http://git.oschina.net/huangyong/smart-framework

  5. <input type = "submit"> 提交方式和用js的form.submit()有什么区别?

    假设: A表单内有<input type="submit">,通过点击这个input来提交表单 B表单内没有<input type="submit&qu ...

  6. 求x>0时,y=x^3-6x^2+15的极值

    解: 当x→∞时,y也→∞,所以y没有最大值. y=x3-6x2+15=-4*(x/2)*(x/2)*(6-x)+15 而根据几何平均数小于等于算术平均数的定理,(x/2)*(x/2)*(6-x)在x ...

  7. JMeter 十四:最佳实践

    参考:http://jmeter.apache.org/usermanual/best-practices.html 1. 总是使用最新版本的JMeter 2. 使用合适数目的Thread Threa ...

  8. vue - 条件语句

    1.与小程序不同之处一,小程序无论变量还是常亮都可以用双向绑定来解决{{}},而vue一旦双(单)引号包起来以后就失效了. 2.注意一点,切记双引号注意不要混淆哈,这里是一排双引号包单引号,那里是一排 ...

  9. TP框架模板中默认值输出

    TP框架模板中默认值输出 我们可以给变量输出提供默认值,例如: {$user.nickname|default="这家伙很懒,什么也没留下"} 对系统变量依然可以支持默认值输出,例 ...

  10. !HDU 1078 FatMouse and Cheese-dp-(记忆化搜索)

    题意:有一个n*n的格子.每一个格子里有不同数量的食物,老鼠从(0,0)開始走.每次下一步仅仅能走到比当前格子食物多的格子.有水平和垂直四个方向,每一步最多走k格,求老鼠能吃到的最多的食物. 分析: ...