准备工作
一些比较有用的声明
大小写转换: function ToLower: string; function ToLower(LocaleID: TLocaleID): string; function ToLowerInvariant: string; function ToUpper: string; function ToUpper(LocaleID: TLocaleID): string; function ToUpperInvariant: string; class function LowerCase(const S: string): string; class function LowerCase(const S: string; LocaleOptions: TLocaleOptions): string; class function UpperCase(const S: string): string; class function UpperCase(const S: string; LocaleOptions: TLocaleOptions): string; //--------------------------------------------------------------- var str: string; begin str := 'Delphi'; str := str.ToLower; // delphi str := str.ToUpper; // DELPHI end; 清除两边空格或指定字符: function Trim: string; function TrimLeft: string; function TrimRight: string; function Trim(const TrimChars: array of Char): string; function TrimLeft(const TrimChars: array of Char): string; function TrimRight(const TrimChars: array of Char): string;
字符串对比
function CompareTo(const strB: string): Integer; class function Compare(const StrA: string; const StrB: string): Integer; class function CompareText(const StrA: string; const StrB: string): Integer; class function Compare(const StrA: string; const StrB: string; LocaleID: TLocaleID): Integer; class function Compare(const StrA: string; const StrB: string; IgnoreCase: Boolean): Integer; class function Compare(const StrA: string; const StrB: string; IgnoreCase: Boolean; LocaleID: TLocaleID): Integer; class function Compare(const StrA: string; IndexA: Integer; const StrB: string; IndexB: Integer; Length: Integer): Integer; class function Compare(const StrA: string; IndexA: Integer; const StrB: string; IndexB: Integer; Length: Integer; LocaleID: TLocaleID): Integer; class function Compare(const StrA: string; IndexA: Integer; const StrB: string; IndexB: Integer; Length: Integer; IgnoreCase: Boolean): Integer; class function Compare(const StrA: string; IndexA: Integer; const StrB: string; IndexB: Integer; Length: Integer; IgnoreCase: Boolean; LocaleID: TLocaleID): Integer; class function CompareOrdinal(const StrA: string; const StrB: string): Integer; class function CompareOrdinal(const StrA: string; IndexA: Integer; const StrB: string; IndexB: Integer; Length: Integer): Integer; //---------------------------------------------------------------
搜索字符串
搜索字符串: function IndexOf(value: Char): Integer; function IndexOf(const Value: string): Integer; function IndexOf(Value: Char; StartIndex: Integer): Integer; function IndexOf(const Value: string; StartIndex: Integer): Integer; function IndexOf(Value: Char; StartIndex: Integer; Count: Integer):
function IndexOf(const Value: string; StartIndex: Integer; Count: Integer): Integer; function IndexOfAny(const AnyOf: array of Char): Integer; function IndexOfAny(const AnyOf: array of Char; StartIndex: Integer): Integer; function IndexOfAny(const AnyOf: array of Char; StartIndex: Integer; Count: Integer): Integer; function LastIndexOf(Value: Char): Integer; function LastIndexOf(const Value: string): Integer; function LastIndexOf(Value: Char; StartIndex: Integer): Integer; function LastIndexOf(const Value: string; StartIndex: Integer): Integer; function LastIndexOf(Value: Char; StartIndex: Integer; Count: Integer): Integer; function LastIndexOf(const Value: string; StartIndex: Integer; Count: Integer): Integer; function LastIndexOfAny(const AnyOf: array of Char): Integer; function LastIndexOfAny(const AnyOf: array of Char; StartIndex: Integer): Integer; function LastIndexOfAny(const AnyOf: array of Char; StartIndex: Integer; Count: Integer): Integer; //---------------------------------------------------------------
是否包含: function Contains(const Value: string): Boolean; function StartsWith(const Value: string): Boolean; function StartsWith(const Value: string; IgnoreCase: Boolean): Boolean; function EndsWith(const Value: string): Boolean; function EndsWith(const Value: string; IgnoreCase: Boolean): Boolean; class function EndsText(const ASubText, AText: string): Boolean; //---------------------------------------------------------------
添加或解除引号: function QuotedString: string; function QuotedString(const QuoteChar: Char): string; function DeQuotedString: string; function DeQuotedString(const QuoteChar: Char): string; //---------------------------------------------------------------
适宽处理: function PadLeft(TotalWidth: Integer): string; function PadLeft(TotalWidth: Integer; PaddingChar: Char): string; function PadRight(TotalWidth: Integer): string; function PadRight(TotalWidth: Integer; PaddingChar: Char): string; //--------------------------------------------------------------- var str: string; begin str := '1'; str := str.PadLeft(4, '0'); // 0001 end; 插入与删除: function Insert(StartIndex: Integer; const Value: string): string; function Remove(StartIndex: Integer): string; function Remove(StartIndex: Integer; Count: Integer): string; //---------------------------------------------------------------
截取: function Substring(StartIndex: Integer): string; function Substring(StartIndex: Integer; Length: Integer): string; //--------------------------------------------------------------- var str1, str2: string; begin str1 := 'Delphi XE4'; str2 := str1.Substring(7); // XE4 str2 := str1.Substring(7, 2); // XE end; 替换: function Replace(OldChar: Char; NewChar: Char): string; function Replace(OldChar: Char; NewChar: Char; ReplaceFlags: TReplaceFlags): string; function Replace(const OldValue: string; const NewValue: string): string; function Replace(const OldValue: string; const NewValue: string; ReplaceFlags: TReplaceFlags): string; //-------------------------------------------------------------- var str1, str2: string; begin str1 := 'ABC ABC ABC'; str2 := str1.Replace('A', '*'); // *BC *BC *BC str2 := str1.Replace('A', '*', [rfIgnoreCase]); // *BC ABC ABC end; 分割: function Split(const Separator: array of Char): TArray<string>; function Split(const Separator: array of Char; Count: Integer): TArray<string>; function Split(const Separator: array of Char; Options: TStringSplitOptions): TArray<string>; function Split(const Separator: array of string; Options: TStringSplitOptions): TArray<string>; function Split(const Separator: array of Char; Count: Integer; Options: TStringSplitOptions): TArray<string>; function Split(const Separator: array of string; Count: Integer; Options: TStringSplitOptions): TArray<string>; //---------------------------------------------------------------
连接: class function Join(const Separator: string; const values: array of const): string; class function Join(const Separator: string; const Values: array of string): string; class function Join(const Separator: string; const Values: IEnumerator<string>): string; class function Join(const Separator: string; const Values: IEnumerable<string>): string; class function Join(const Separator: string; const value: array of string; StartIndex: Integer; Count: Integer): string; //-------------------------------------------------------------- var S: string; str: string; strArr: TArray<string>; begin str := 'A1,B2,C3,,,,D4,E5,F6,G7'; strArr := str.Split([','], ExcludeEmpty); str := S.Join('-', strArr); // A1-B2-C3-D4-E5-F6-G7 str := S.Join('; ', [1,2,3,4,5]); // 1; 2; 3; 4; 5 str := S.Join(',', ['abc', 123, true]); // abc,123,True end; 类型转换: function ToBoolean: Boolean; function ToInteger: Integer; function ToSingle: Single; function ToDouble: Double; function ToExtended: Extended; class function ToBoolean(const S: string): Boolean; class function ToInteger(const S: string): Integer; class function ToSingle(const S: string): Single; class function ToDouble(const S: string): Double; class function ToExtended(const S: string): Extended;
定界符: function IsDelimiter(const Delimiters: string; Index: Integer): Boolean; function LastDelimiter(const Delims: string): Integer; //---------------------------------------------------------------
空字符串: const Empty = ''; function IsEmpty: Boolean; class function IsNullOrEmpty(const Value: string): Boolean; class function IsNullOrWhiteSpace(const Value: string): Boolean; //--------------------------------------------------------------
String 与 Char: class function Create(C: Char; Count: Integer): string; class function Create(const Value: array of Char; StartIndex: Integer; Length: Integer): string; class function Create(const Value: array of Char): string; property Chars[Index: Integer]: Char read GetChars; property Length: Integer read GetLength; function CountChar(const C: Char): Integer; function ToCharArray: TArray<Char>; function ToCharArray(StartIndex: Integer; Length: Integer): TArray<Char>; procedure CopyTo(SourceIndex: Integer; var destination: array of Char; DestinationIndex: Integer; Count: Integer); //---------------------------------------------------------------
接下来重要的打电话
9 打电话、发短信和邮件,取得手机 IMEI 号 以下实现对电话功能的基本操作。 1、引用以下单元 uses Androidapi.JNI.Net, FMX.Platform, FMX.Helpers.Android, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, FMX.MediaLibrary.Actions, FMX.StdActns, Androidapi.JNIBridge, Androidapi.Helpers, Androidapi.JNI.Telephony, FMX.PhoneDialer , Androidapi.JNI.Os 2、建立如下函数 public { Public declarations } TelephonyManager: JTelephonyManager; procedure Call_URI(const AAction: JString; const AURI: string); // 打电话、打开地图显示某个坐标点 、发送电子邮件、播放音乐 procedure PhoneCall(phoneNumber: string); // 打电话 procedure GetSN; // 获取Android手机 SIM卡串号 procedure SentSMS(phoneNumber , SMSstring: string); // 直接没有任何提示的发送短信 procedure SentSMSfromIntent(phoneNumber , SMSstring: string); // 调用系统程序发短信 function FetchSms: string; // 收短信 3、实现函数功能 procedure TForm1.PhoneCall(phoneNumber: string); // 打电话 var phone: IFMXPhoneDialerService; begin if TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(phone)) then begin phone.Call(phoneNumber); // 监听电话状态请用phone.OnCallStateChanged事件 end; end; procedure TForm1.SentSMSfromIntent(phoneNumber , SMSstring: string); // 调用系统程序发短信 var
uri: Jnet_Uri; Intent: JIntent; begin uri := StrToJURI('smsto:' + phoneNumber); Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_SENDTO, uri);
Intent.putExtra(StringToJString('sms_body'), StringToJString(SMSstring)); SharedActivityContext.startActivity(Intent); end; procedure TForm1.SentSMS(phoneNumber , SMSstring: string); // 直接没有任何提示的发送短信 var j: JSmsManager; begin j := tjsmsmanager .Create; j.sendMultipartTextMessage(StringToJString(phoneNumber), nil, j.divideMessage(StringToJString(SMSstring)), nil, nil); end; procedure TForm1.GetSN; // 获取Android手机SIM卡串号 var TelephonyServiceNative: JObject; begin TelephonyServiceNative := SharedActivityContext.getSystemService (TJContext.JavaClass.TELEPHONY_SERVICE); if Assigned(TelephonyServiceNative) then TelephonyManager := TJTelephonyManager .Wrap ((TelephonyServiceNative as ILocalObject).GetObjectID); // TelephonyManager .getDeviceId 取IMEI // TelephonyManager .getLine1Number 取 MSISDN 手机号,大部分 SIM 卡中不会写入这个 信息 // TelephonyManager .getSimSerialNumber 取 ICCID // TelephonyManager .getSubscriberId 取 IMSI 运营商实际上是用这个查询的他那张对应 电话号码的表 end; function TForm1.FetchSms: string; // 收短信 var
cursor: JCursor; uri: Jnet_Uri; address, person, msgdatesent, protocol, msgread, msgstatus, msgtype, msgreplypathpresent, Subject, body, servicecenter , locked: string; msgunixtimestampms: int64; addressidx, personidx, msgdateidx, msgdatesentidx, protocolidx, msgreadidx, msgstatusidx, msgtypeidx, msgreplypathpresentidx, subjectidx, bodyidx, servicecenteridx, lockedidx: integer; begin uri := StrToJURI('content://sms/inbox'); //收件箱
// cursor := SharedActivity.getContentResolver .query(uri, nil, nil, nil, nil); cursor := SharedActivity. managedQuery( StrToJURI('content://sms/inbox'), //StrToJURI('content://sms/')所有短信, 含 发件箱 nil, StringToJString('1=1) group by (address'),//类似于 SQL语句,注意,括号只 有一半,原因中它已经有一对括号了 nil, StringToJString('date asc')); //desc 降序 //以上执行的语句是:SELECT * FROM sms WHERE (type=1) AND (1=1) group by (address) order by date asc addressidx := cursor .getColumnIndex(StringToJstring('address'));//电话 personidx := cursor .getColumnIndex(StringToJstring('person')); msgdateidx := cursor .getColumnIndex(StringToJstring('date')); msgdatesentidx := cursor .getColumnIndex(StringToJstring('date_sent')); protocolidx := cursor .getColumnIndex(StringToJstring('protocol')); msgreadidx := cursor .getColumnIndex(StringToJstring('read')); msgstatusidx := cursor .getColumnIndex(StringToJstring('status')); msgtypeidx := cursor .getColumnIndex(StringToJstring('type')); msgreplypathpresentidx := cursor .getColumnIndex (StringToJstring('reply_path_present')); subjectidx := cursor .getColumnIndex(StringToJstring('subject')); bodyidx := cursor .getColumnIndex(StringToJstring('body')); servicecenteridx := cursor .getColumnIndex(StringToJstring('service_center')); lockedidx := cursor .getColumnIndex(StringToJstring('locked')); // while (cursor .moveToNext) do//对所有短信的循环 // begin cursor .moveToLast;//最后一条 address := JStringToString(cursor .getString(addressidx)); person := JStringToString(cursor .getString(personidx)); msgunixtimestampms := cursor .getLong(msgdateidx);
msgdatesent := JStringToString(cursor .getString(msgdatesentidx)); protocol := JStringToString(cursor .getString(protocolidx)); msgread := JStringToString(cursor .getString(msgreadidx)); msgstatus := JStringToString(cursor .getString(msgstatusidx)); msgtype := JStringToString(cursor .getString(msgtypeidx)); msgreplypathpresent := JStringToString (cursor .getString(msgreplypathpresentidx)); Subject := JStringToString(cursor .getString(subjectidx)); body := JStringToString(cursor .getString(bodyidx)); servicecenter := JStringToString(cursor .getString(servicecenteridx)); locked := JStringToString(cursor .getString(lockedidx)); Result := IntToStr(trunc(msgunixtimestampms / 1000))+#13
+ '号码:' + address +#13 + 'person:' + person +#13 + 'msgdatesent:' + msgdatesent +#13 + 'protocol:' + protocol +#13 + 'msgread:' + msgread+#13 + 'msgstatus:' + msgstatus +#13 + 'msgtype:' + msgtype +#13 + 'msgreplypathpresent:' + msgreplypathpresent+#13 + 'Subject:' + Subject+#13 + 'servicecenter:' + servicecenter +#13 + 'locked:' + locked +#13 + '内容:' + body; // end; end;
********************************************************
以下是我设计的一款抢积分的安卓应用
结合我的服务端 向安卓端发送积分 可同时抢积分
|
请发表评论