delphi xe10 手机内部系统相关操作(手机信息震动剪贴板键盘电话拨号)

Posted guorongtao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi xe10 手机内部系统相关操作(手机信息震动剪贴板键盘电话拨号)相关的知识,希望对你有一定的参考价值。

//获取手机信息
function GetPhoneInfo(): string;
Var
  TelephonyManager: JTelephonyManager;
  TelephonyServiceNative: JObject;
begin
  result := ‘‘;
  TelephonyServiceNative := SharedActivityContext.getSystemService
    (TJContext.JavaClass.TELEPHONY_SERVICE);
  if Assigned(TelephonyServiceNative) then
    TelephonyManager := TJTelephonyManager.Wrap
      ((TelephonyServiceNative as ILocalObject).GetObjectID);
  result := JStringToString(TelephonyManager.getLine1Number);//取得手机号
  //TelephonyManager.getDeviceId 取IMEI
  //TelephonyManager.getLine1Number 取MSISDN  手机号,大部分SIM卡中不会写入这个信息
  //TelephonyManager.getSimSerialNumber 取ICCID
  //TelephonyManager.getSubscriberId 取IMSI  运营商实际上是用这个查询的
end;


//手机振动
uses  FMX.Helpers.android,  Androidapi.JNI.App,  Androidapi.JNI.Os,  Androidapi.JNIBridge, FMX.StdCtrls;
procedure TForm1.Button2Click(Sender: TObject);
function GetVibratorArray(const AintArr:array of int64):TJavaArray<int64>;//震动规律函数
var
  Lindex:integer;
begin
  Result:=TJavaArray<int64>.Create(Length(AintArr));
  for Lindex:=Low(AintArr) to High(AintArr) do
      Result.Items [Lindex]:= AintArr[Lindex];
end;
var
   LVibrator:JVibrator;
   LJavaArray:TJavaArray<int64>;
begin
   LVibrator:=TJVibrator.Wrap((SharedActivity.getSystemService(TJActivity.javaClass.VIBRATOR_SERVICE ) as iLocalObject).GetObjectID );//引用震动
   if not LVibrator.hasVibrator then
   begin
     showmessage(手机不支持震动);
     exit;
   end;
   LVibrator.vibrate(200);//震动200ms
   LVibrator.cancel ;//立刻停止震动
   LJavaArray:=GetVibratorArray([200,1000,3000,5000]);//调用震动规律
   LVibrator.vibrate(LJavaArray,-1);//不重复,  震动一 次
   LJavaArray:=GetVibratorArray([200,1000,3000,5000]);//调用震动规律
   LVibrator.vibrate(LJavaArray,0);//v不停重复,大于0的参数,可以指定震动次数
end;
//剪贴版FClipboardService: IFMXClipboardService;
TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService,    IInterface(FClipboardService));
FClipboardService.SetClipboard(Tvalue(Edit1.Text));  //复制
FClipboardService.GetClipboard.ToString;  //粘贴

//键盘FService: IFMXVirtualKeyboardToolbarService;
if TPlatformServices.Current.SupportsPlatformService (IFMXVirtualKeyboardToolbarService, IInterface(FService)) then 
begin
  FService.SetToolbarEnabled(true);
  FService.SetHideKeyboardButtonVisibility(true);
end;

 

//电话信息(Call拨号)
PhoneDialerService: IFMXPhoneDialerService; 

//获取电话服务信息
procedure TPhoneDialerForm.btnGetCarrierInfoClick(Sender: TObject);
var
  PhoneDialerService: IFMXPhoneDialerService;
begin 
   test whether the PhoneDialer services are supported 
  if TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(PhoneDialerService)) then
  begin
     if yes, then update the labels with the retrieved information 
    CarrierNameItem.ItemData.Detail := PhoneDialerService.GetCarrier.GetCarrierName;
    CountryCodeItem.ItemData.Detail := PhoneDialerService.GetCarrier.GetIsoCountryCode;
    NetworkCodeItem.ItemData.Detail := PhoneDialerService.GetCarrier.GetMobileCountryCode;
    MobileNetworkItem.ItemData.Detail := PhoneDialerService.GetCarrier.GetMobileNetwork;
  end
  else
    ShowMessage(PhoneDialer service not supported);
end;

//拨号
procedure TPhoneDialerForm.btnMakeCallClick(Sender: TObject);
var
  PhoneDialerService: IFMXPhoneDialerService;
begin 
   test whether the PhoneDialer services are supported 
  if TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(PhoneDialerService)) then
  begin
     if the Telephone Number is entered in the edit box then make the call, else
      display an error message 
    if edtTelephoneNumber.Text <> ‘‘ then
      PhoneDialerService.Call(edtTelephoneNumber.Text)
    else
    begin
      ShowMessage(Please type in a telephone number.);
      edtTelephoneNumber.SetFocus;
    end;
  end
  else
    ShowMessage(PhoneDialer service not supported);
end;
Intent :TJIntent
uses
  Androidapi.JNI.GraphicsContentViewText, FMX.Helpers.Android, Androidapi.JNI.Net, Androidapi.Helpers;
procedureCall_URI(constAAction : JString;constAURI: string);
var
  uri: Jnet_Uri;
  Intent: JIntent;
begin
  uri := StrToJURI(AURI);
  Intent := TJIntent.JavaClass.init(AAction, uri);
  Intent.putExtra()

//短信
Call_URI(TJIntent.JavaClass.ACTION_SENDTO, ‘smsto:137114553XX‘);
Intent.putExtra(StringToJString(‘sms_body‘), StringToJString(‘测试短信‘));
  如果是要发短信等复杂的应用,需要传递各种其他的参数.要用到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_VIEW, www.baidu.com);
//发送电子邮件
 Call_URI(TJIntent.JavaClass.ACTION_SENDTO, mailto:[email protected]);
//播放音乐
Call_URI(TJIntent.JavaClass.ACTION_VIEW, file:///sdcard/download/最炫民族风.mp3);

 

以上是关于delphi xe10 手机内部系统相关操作(手机信息震动剪贴板键盘电话拨号)的主要内容,如果未能解决你的问题,请参考以下文章

delphi xe10 麦克风摄像头操作

delphi xe10 消息操作

delphi XE6 进行android开发关于真机使用EDIT或者MEMO出现假死重启问题。

Android实例-Delphi开发蓝牙官方实例解析(XE10+小米2+小米5)

delphi xe5 android 开发实现手机打电话和发短信

[原创]Delphi XE 手机端实现沉浸式透明状态栏