Android实例-打电话、发短信和邮件,取得手机IMEI号(XE8+小米2)

1 unit Unit1;
  2 
  3 interface
  4 
  5 uses
  6   System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  7   FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  8   FMX.ScrollBox, FMX.Memo, FMX.Layouts,
  9   Androidapi.JNI.Net,//需要引入
 10   Androidapi.JNI.GraphicsContentViewText,//需要引入
 11   Androidapi.JNI.JavaTypes,//需要引入
 12   Androidapi.JNIBridge,//需要引入
 13   Androidapi.Helpers,//需要引入
 14   Androidapi.JNI.Telephony,//需要引入
 15   Androidapi.JNI.Os,//需要引入
 16   FMX.Platform,//需要引入
 17   FMX.Helpers.Android,//需要引入
 18   FMX.MediaLibrary.Actions,//需要引入
 19   FMX.StdActns,//需要引入
 20   FMX.PhoneDialer,//需要引入
 21   FMX.Controls.Presentation;//需要引入
 22 
 23 type
 24   TForm1 = class(TForm)
 25     Label1: TLabel;
 26     Memo1: TMemo;
 27     Layout1: TLayout;
 28     Button1: TButton;
 29     Button2: TButton;
 30     Button3: TButton;
 31     Button4: TButton;
 32     Button5: TButton;
 33     Button6: TButton;
 34     Button7: TButton;
 35     procedure Button1Click(Sender: TObject);
 36     procedure Button2Click(Sender: TObject);
 37     procedure Button3Click(Sender: TObject);
 38     procedure Button4Click(Sender: TObject);
 39     procedure Button5Click(Sender: TObject);
 40     procedure Button6Click(Sender: TObject);
 41     procedure Button7Click(Sender: TObject);
 42   private
 43     { Private declarations }
 44   public
 45     TelephonyManager: JTelephonyManager;
 46     // 打电话、打开地图显示某个坐标点 、发送电子邮件、播放音乐
 47     procedure Call_URI(const AAction: JString; const AURI: string);
 48     //实现打电话功能
 49     procedure PhoneCall(phoneNumber: string);
 50     //调用系统程序发短信
 51     procedure SentSMSfromIntent(phoneNumber, SMSstring: string);
 52     //直接没有任何提示的发送短信
 53     procedure SentSMS(phoneNumber, SMSstring: string);
 54     //获取Android手机SIM卡串号
 55     procedure GetSN;
 56     //接收短信
 57     function FetchSms: string;
 58     { Public declarations }
 59   end;
 60 
 61 var
 62   Form1: TForm1;
 63 
 64 implementation
 65 {$R *.fmx}
 66 {$R *.NmXhdpiPh.fmx ANDROID}
 67 
 68 //打电话、打开地图显示某个坐标点 、发送电子邮件、播放音乐
 69 procedure TForm1.Call_URI(const AAction: JString; const AURI: string);
 70 var
 71   uri: Jnet_Uri;
 72   Intent: JIntent;
 73 begin
 74   uri := StrToJURI(AURI);
 75   Intent := TJIntent.JavaClass.init(AAction, uri);
 76   SharedActivityContext.startActivity(Intent);
 77   /// /打开地图显示某个坐标点
 78   // Call_URI(TJIntent.JavaClass.ACTION_VIEW, 'geo:38.899533,-77.036476');
 79 end;
 80 
 81 //实现打电话功能
 82 procedure TForm1.PhoneCall(phoneNumber: string);
 83 var
 84   phone: IFMXPhoneDialerService;
 85 begin
 86   if TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(phone)) then
 87   begin
 88     phone.Call(phoneNumber);
 89     //监听电话状态请用 phone.OnCallStateChanged事件
 90   end;
 91 end;
 92 
 93 //调用系统程序发短信
 94 procedure TForm1.SentSMSfromIntent(phoneNumber, SMSstring: string);
 95 var
 96   uri: Jnet_Uri;
 97   Intent: JIntent;
 98 begin
 99   uri := StrToJURI('smsto:' + phoneNumber);
100   Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_SENDTO, uri);
101   Intent.putExtra(StringToJString('sms_body'), StringToJString(SMSstring));
102   SharedActivityContext.startActivity(Intent);
103 end;
104 
105 //直接没有任何提示的发送短信
106 procedure TForm1.SentSMS(phoneNumber, SMSstring: string);
107 var
108   j: JSmsManager;
109 begin
110   j := tjsmsmanager.Create;
111   j.sendMultipartTextMessage(StringToJString(phoneNumber), nil, j.divideMessage(StringToJString(SMSstring)), nil, nil);
112 end;
113 
114 //获取Android手机SIM卡串号
115 procedure TForm1.GetSN;
116 var
117   TelephonyServiceNative: JObject;
118 begin
119   TelephonyServiceNative := SharedActivityContext.getSystemService
120   (TJContext.JavaClass.TELEPHONY_SERVICE);
121   if Assigned(TelephonyServiceNative) then
122   TelephonyManager := TJTelephonyManager.Wrap
123   ((TelephonyServiceNative as ILocalObject).GetObjectID);
124   // TelephonyManager.getDeviceId 取 IMEI
125   // TelephonyManager.getLine1Number 取 MSISDN 手机号,大部分 SIM 卡中不会写入这个信息
126   // TelephonyManager.getSimSerialNumber 取 ICCID
127   // TelephonyManager.getSubscriberId 取 IMSI 运营商实际上是用这个查询的他那张对应电话号码的表
128 end;
129 
130 //接收短信
131 function TForm1.FetchSms: string;
132 var
133   cursor: JCursor;
134   uri: Jnet_Uri;
135   address, person, msgdatesent, protocol, msgread, msgstatus, msgtype,
136   msgreplypathpresent, Subject, body, servicecenter, locked: string;
137   msgunixtimestampms: int64;
138   addressidx, personidx, msgdateidx, msgdatesentidx, protocolidx, msgreadidx,
139   msgstatusidx, msgtypeidx, msgreplypathpresentidx, subjectidx, bodyidx,
140   servicecenteridx, lockedidx: integer;
141 begin
142   uri := StrToJURI('content://sms/inbox'); //收件箱
143   cursor := SharedActivity.getContentResolver.query(//uri, nil, nil, nil, nil);
144 //  cursor := SharedActivity.
145 //  managedQuery(
146   StrToJURI('content://sms/inbox'), //StrToJURI('content://sms/')所有短信, 含发件箱
147   nil,
148   StringToJString('1=1) group by (address'),//类似于 SQL 语句,注意,括号只有一半,原因中它已经有一对括号了
149   nil,
150   StringToJString('date asc')); //desc 降序
151   //以上执行的语句是:SELECT * FROM sms WHERE (type=1) AND (1=1) group by (address) order by date asc
152   addressidx := cursor.getColumnIndex(StringToJstring('address'));//电话
153   personidx := cursor.getColumnIndex(StringToJstring('person'));
154   msgdateidx := cursor.getColumnIndex(StringToJstring('date'));
155   msgdatesentidx := cursor.getColumnIndex(StringToJstring('date_sent'));
156   protocolidx := cursor.getColumnIndex(StringToJstring('protocol'));
157   msgreadidx := cursor.getColumnIndex(StringToJstring('read'));
158   msgstatusidx := cursor.getColumnIndex(StringToJstring('status'));
159   msgtypeidx := cursor.getColumnIndex(StringToJstring('type'));
160   msgreplypathpresentidx := cursor.getColumnIndex(StringToJstring('reply_path_present'));
161   subjectidx := cursor.getColumnIndex(StringToJstring('subject'));
162   bodyidx := cursor.getColumnIndex(StringToJstring('body'));
163   servicecenteridx := cursor.getColumnIndex(StringToJstring('service_center'));
164   lockedidx := cursor.getColumnIndex(StringToJstring('locked'));
165   // while (cursor.moveToNext) do//对所有短信的循环
166   // begin
167   cursor.moveToLast;//最后一条
168   address := JStringToString(cursor.getString(addressidx));
169   person := JStringToString(cursor.getString(personidx));
170   msgunixtimestampms := cursor.getLong(msgdateidx);
171   msgdatesent := JStringToString(cursor.getString(msgdatesentidx));
172   protocol := JStringToString(cursor.getString(protocolidx));
173   msgread := JStringToString(cursor.getString(msgreadidx));
174   msgstatus := JStringToString(cursor.getString(msgstatusidx));
175   msgtype := JStringToString(cursor.getString(msgtypeidx));
176   msgreplypathpresent := JStringToString(cursor.getString(msgreplypathpresentidx));
177   Subject := JStringToString(cursor.getString(subjectidx));
178   body := JStringToString(cursor.getString(bodyidx));
179   servicecenter := JStringToString(cursor.getString(servicecenteridx));
180   locked := JStringToString(cursor.getString(lockedidx));
181   Result := IntToStr(trunc(msgunixtimestampms / 1000))+#13
182   + '号码:' + address +#13
183   + 'person:' + person +#13
184   + 'msgdatesent:' + msgdatesent +#13
185   + 'protocol:' + protocol +#13
186   + 'msgread:' + msgread+#13
187   + 'msgstatus:' + msgstatus +#13
188   + 'msgtype:' + msgtype +#13
189   + 'msgreplypathpresent:' + msgreplypathpresent+#13
190   + 'Subject:' + Subject+#13
191   + 'servicecenter:' + servicecenter +#13
192   + 'locked:' + locked +#13
193   + '内容:' + body;
194 end;
195 
196 procedure TForm1.Button1Click(Sender: TObject);
197 begin
198   Label1.Text := '打电话、发短信和邮件,取得手机 IMEI!';
199 end;
200 
201 procedure TForm1.Button2Click(Sender: TObject);
202 begin
203   PhoneCall('10086');
204   //Call_URI(TJIntent.JavaClass.ACTION_CALL, 'tel:10086');//这个也可以
205 end;
206 
207 procedure TForm1.Button3Click(Sender: TObject);
208 begin
209   //直接没有任何提示的发送短信,尽量不用,这不道德。短信不限制长度,如超长,自动分条发送
210   SentSMS('15810853101', '直接没有任何提示的发送短信');
211 end;
212 
213 procedure TForm1.Button4Click(Sender: TObject);
214 begin
215   //调用系统程序发短信,短信不限制长度,如超长,自动分条发送
216   SentSMSfromIntent('15810853101', '调用系统程序发短信。');
217 end;
218 
219 procedure TForm1.Button5Click(Sender: TObject);
220 begin
221   //调用系统程序发送电子邮件
222   Call_URI(TJIntent.JavaClass.ACTION_SENDTO, 'mailto:513187410@qq.com');
223 end;
224 
225 procedure TForm1.Button6Click(Sender: TObject);
226 begin
227   GetSN; //先调用一下
228   Label1.Text := '本手机 IMEI:' + jstringtostring(TelephonyManager.getDeviceId); //取IMEI;
229 end;
230 
231 procedure TForm1.Button7Click(Sender: TObject);
232 begin
233   Memo1.Lines.Text := FetchSms;
234 end;
235 
236 end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值