zoukankan      html  css  js  c++  java
  • delphi xe5 android 开发实现手机打电话和发短信

    其实都可以通过intent和URI调用系统功能.Windows程序员可以理解成是ShellExecute.这个是万金油.可以有调用各种功能.后面会介绍.

    1.短信息.很简单

    方法a.不使用Intent而是直接发短信. smsManager对应的Delphi代码应该是:

    uses
      Androidapi.JNI.JavaTypes,Androidapi.JNI.Telephony;
    var
      j: JSmsManager;
    begin
      j := tjsmsmanager.Create;
      j.sendTextMessage(stringtojstring('137114553XX'),nil, stringtojstring('测试短信'),nil,nil);
    end;

    至于双卡双待用哪个卡来发送这些我没有详细研究,有兴趣的朋友可以研究下. 方法b.使用Intent启动系统的短信程序:

    我猜以后这种方式会和电话一样会合并到TPlatformServices中.

    uses
    Androidapi.JNI.GraphicsContentViewText,
     FMX.Helpers.Android,
     Androidapi.JNI.Net
    
    var
    uri: Jnet_Uri;
    
    Intent: JIntent;
    begin
        uri := StrToJURI('smsto:137114553XX');
        Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_SENDTO, uri);
        Intent.putExtra(StringToJString('sms_body'), StringToJString('测试短信'));
        
        SharedActivityContext.startActivity(Intent);
    end;

    2.电话

    uses
    FMX.Platform,
     FMX.PhoneDialer;
    
    var
        phone: IFMXPhoneDialerService;
    begin
    
        if TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(phone)) then
        begin
            phone.Call('137114553XX');    
            //监听电话请用phone.OnCallStateChanged事件
        end;
    end;

    这段代码适用于iOS和Android. Android平台上实际上电话的封装就是系统的Intent方式调用.

    扩展说一下,怎么使用Intent和Action.

    简单封装了一个函数.可以使用Intent调用各种系统程序.大家理解成Windows的ShellExecute即可.

    uses
    
    Androidapi.JNI.GraphicsContentViewText,
     FMX.Helpers.Android,
     Androidapi.JNI.Net;
    
    procedure Call_URI(const AAction : JString;const AURI:string);
    var
        uri: Jnet_Uri;
        Intent: JIntent;
    begin
        uri := StrToJURI(AURI);
        Intent := TJIntent.JavaClass.init(AAction, uri);
        {
        Intent.putExtra()
        如果是要发短信等复杂的应用,需要传递各种其他的参数.要用到Intent.putExtra()传递多个参数.
        这里只封装最简单的,具体Intent.putExtra()的用法,可以查询Java的资料.大把的
        }
     
        SharedActivityContext.startActivity(Intent);
    end;
     
    
    //使用例子:
    //打电话
    Call_URI(TJIntent.JavaClass.ACTION_CALL,'tel:137114553XX');
    
    //打开地图显示某个坐标点
    Call_URI(TJIntent.JavaClass.ACTION_VIEW,'geo:38.899533,-77.036476');
    
    //发送电子邮件
    Call_URI(TJIntent.JavaClass.ACTION_SENDTO,'mailto:wr960204@126.com');
    
    //播放音乐
    Call_URI(TJIntent.JavaClass.ACTION_VIEW,'file:///sdcard/download/最炫民族风.mp3');

    最后别忘了配置权限.Android程序是需要权限的. 
    另外补充一点,做Android开发最好还是有点java开发经验,这样对Android的体系可以有一个比较具体的了解,最起码知道调用的概念.其他平台同理. 先了解多各个平台的概念,然后用XE5开发.XE5解决的是实际工作的时候为了一套代码多个平台使用.

  • 相关阅读:
    /etc/sysctl.conf 控制内核相关配置文件
    python 并发编程 非阻塞IO模型
    python 并发编程 多路复用IO模型
    python 并发编程 异步IO模型
    python 并发编程 阻塞IO模型
    python 并发编程 基于gevent模块 协程池 实现并发的套接字通信
    python 并发编程 基于gevent模块实现并发的套接字通信
    python 并发编程 io模型 目录
    python 并发编程 socket 服务端 客户端 阻塞io行为
    python 并发编程 IO模型介绍
  • 原文地址:https://www.cnblogs.com/m0488/p/9750785.html
Copyright © 2011-2022 走看看