Sending a URL to Another App on Android and iOS with Delphi XE5

本文介绍了一个用于跨平台(iOS和Android)打开各种URL协议的开源库。该库使用TidURL进行URL编码,并提供了多种示例,如打开网页、拨打电话、发送短信等。文章还分享了针对不同平台特性的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Here is the source code for my Open and View URL library from my CodeRage 8 session “Beyond the App”. Here is a download of the example app. I’ll see about posting it to a SVN repository too so it can grow and evolve. Thanks to Al Mannarino for his code that started this!

Note the code is using TidURL.URLEncode on all URLs. I found it is only required on the maps for iOS (iOS doesn’t like spaces) but may be causing trouble with the geo:// on Android.

Some example protocols

  • http, tel, sms, fb, mailto, twitter, geo, etc.

Example URLs

  • – Common to both iOS & Android –
  • http://www.embarcadero.com/
  • tel://(415)834-3131
  • sms://1234
  • http://twitter.com/coderage (This opens with the Twitter client on Android)
  • mailto://jim.mckeeth@embarcadero.com
  • twitter://user?screen_name=coderage
  • fb://profile/34960937498 (get the UID from http://graph.facebook.com/embarcaderotech or for whatever page you are looking for)
  • – iOS Specific –
  • http://maps.apple.com?q=5617 Scotts Valley Drive, Scotts Valley, CA 95066 (this needs the URL encode – Apple has some additional APIs that are recommended.)
  • – Android Only –
  • content://contacts/people/
  • content://contacts/people/1
  • geo://0,0?q=5617 Scotts Valley Drive, Scotts Valley, CA 95066
  • geo://46.191200, -122.194400 (I think this one doesn’t like the URLEncode)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
unit OpenViewUrl;
 
interface
 
// URLEncode is performed on the URL
// so you need to format it   protocol://path
function OpenURL( const URL: string ; const DisplayError: Boolean = False ): Boolean ;
 
implementation
 
uses
   IdURI, SysUtils, Classes, FMX . Dialogs,
{$IFDEF ANDROID}
   Androidapi . Helpers,
   FMX . Helpers . Android, Androidapi . JNI . GraphicsContentViewText,
   Androidapi . JNI . Net, Androidapi . JNI . JavaTypes;
{ $ELSE }
{$IFDEF IOS}
   Macapi . Helpers, iOSapi . Foundation, FMX . Helpers . iOS;
{$ENDIF IOS}
{$ENDIF ANDROID}
 
function OpenURL( const URL: string ; const DisplayError: Boolean = False ): Boolean ;
{$IFDEF ANDROID}
var
   Intent: JIntent;
begin
// There may be an issue with the geo: prefix and URLEncode.
// will need to research
   Intent := TJIntent . JavaClass . init(TJIntent . JavaClass . ACTION_VIEW,
     TJnet_Uri . JavaClass . parse(StringToJString(TIdURI . URLEncode(URL))));
   try
     SharedActivity . startActivity(Intent);
     exit( true );
   except
     on e: Exception do
     begin
       if DisplayError then ShowMessage( 'Error: ' + e . Message);
       exit( false );
     end ;
   end ;
end ;
{ $ELSE }
{$IFDEF IOS}
var
   NSU: NSUrl;
begin
   // iOS doesn't like spaces, so URL encode is important.
   NSU := StrToNSUrl(TIdURI . URLEncode(URL));
   if SharedApplication . canOpenURL(NSU) then
     exit(SharedApplication . openUrl(NSU))
   else
   begin
     if DisplayError then
       ShowMessage( 'Error: Opening "' + URL + '" not supported.' );
     exit( false );
   end ;
end ;
{ $ELSE }
begin
   raise Exception . Create( 'Not supported!' );
end ;
{$ENDIF IOS}
{$ENDIF ANDROID}
 
end .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值