• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

 

结果:

1.不提示发短信卡住,点击没有反映,我猜想,可能是因为我用的是小米手机吧。

2.接收短信报错,我猜想可能是我改了里面的方法吧(哪位大神了解,求指教)。

3.project -->options…--> users permitions。

   3.1 Send SMS

   3.2 Read Phone State权限:将其变成 true即可。

如果 read phone state为 false,程序将启动不了,一直黑屏(我没试,原作者是这么说的,你如果没事可以试一试,试过记得给我说一声哦)。

 

实例代码:

  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:[email protected]\');
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.

 

 

 这个是测试用的,小伙伴们不要用哦。

 1   var
 2   cursor: JCursor;
 3   uri: Jnet_Uri;
 4   address,person,msgdatesent,protocol,msgread,msgstatus,msgtype,
 5   msgreplypathpresent,subject,body,
 6   servicecenter,locked:string;
 7   msgunixtimestampms:int64;
 8   addressidx,personidx,msgdateidx,msgdatesentidx,protocolidx,msgreadidx,
 9   msgstatusidx,msgtypeidx,msgreplypathpresentidx,subjectidx,bodyidx,
10   servicecenteridx,lockedidx:integer;
11 begin
12   uri:=StrToJURI(\'content://sms/inbox\');
13   cursor := SharedActivity.getContentResolver.query(uri, nil, nil,nil,nil);
14   addressidx:=cursor.getColumnIndex(StringToJstring(\'address\'));
15   personidx:=cursor.getColumnIndex(StringToJstring(\'person\'));
16   msgdateidx:=cursor.getColumnIndex(StringToJstring(\'date\'));
17   msgdatesentidx:=cursor.getColumnIndex(StringToJstring(\'date_sent\'));
18   protocolidx:=cursor.getColumnIndex(StringToJstring(\'protocol\'));
19   msgreadidx:=cursor.getColumnIndex(StringToJstring(\'read\'));
20   msgstatusidx:=cursor.getColumnIndex(StringToJstring(\'status\'));
21   msgtypeidx:=cursor.getColumnIndex(StringToJstring(\'type\'));
22   msgreplypathpresentidx:=cursor.getColumnIndex(StringToJstring(\'reply_path_present\'));
23   subjectidx:=cursor.getColumnIndex(StringToJstring(\'subject\'));
24   bodyidx:=cursor.getColumnIndex(StringToJstring(\'body\'));
25   servicecenteridx:=cursor.getColumnIndex(StringToJstring(\'service_center\'));
26   lockedidx:=cursor.getColumnIndex(StringToJstring(\'locked\'));
27   while (cursor.moveToNext) do begin
28     address:=JStringToString(cursor.getString(addressidx));
29     person:=JStringToString(cursor.getString(personidx));
30     msgunixtimestampms:=cursor.getLong(msgdateidx);
31     msgdatesent:=JStringToString(cursor.getString(msgdatesentidx));
32     protocol:=JStringToString(cursor.getString(protocolidx));
33     msgread:=JStringToString(cursor.getString(msgreadidx));
34     msgstatus:=JStringToString(cursor.getString(msgstatusidx));
35     msgtype:=JStringToString(cursor.getString(msgtypeidx));
36     msgreplypathpresent:=JStringToString(cursor.getString(msgreplypathpresentidx));
37     subject:=JStringToString(cursor.getString(subjectidx));
38     body:=JStringToString(cursor.getString(bodyidx));
39     servicecenter:=JStringToString(cursor.getString(servicecenteridx));
40     locked:=JStringToString(cursor.getString(lockedidx));
41     Result:=IntToStr(trunc(msgunixtimestampms/1000))+\' \'+address+\' \'+body;
42   end;
43 end;
View Code

 

 

https://blog.csdn.net/davidtps/article/details/27321801


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
advisor2002在matlab2019中的安装发布时间:2022-07-18
下一篇:
win10 中安装新字体在matlab中无效发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap