介绍
废话不多说,直接上代码,本编文章是针对编译打包代码的sdk < 23 版本的(delphi 10.3 以前版本,不包含10.3),也就是不需要获取运行时权限(动态获取权限)的实例,如果对动态获取权限不理解,请先自行百度 可以参考这里动态权限获取
第一 本案例下面的示例所需要引用的全部单元
uses
System.SysUtils, System.Types, System.UITypes, System.Classes,
System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.Controls.Presentation, FMX.StdCtrls, System.NetEncoding,
Androidapi.JNI.Net,
FMX.Helpers.Android,
FMX.Platform.Android,
Androidapi.Helpers,
Androidapi.JNIBridge,
Androidapi.JNI.Widget,
Androidapi.JNI.App,
Androidapi.JNI.Os,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.Provider,
Androidapi.JNI.GraphicsContentViewText,
FMX.PhoneDialer.Android, FMX.Edit, FMX.ScrollBox,
FMX.Memo, uSkinFireMonkeyMemo;
第二 打开某个应用的特定界面 对应被打开的页面必须 exported:="true"
procedure TForm1.Button1Click(Sender: TObject);
var
intent: JIntent;
ComponentName:JComponentName;
begin
//打开某个应用的特定界面 对应被打开的页面必须 exported:="true"
intent:=TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_MAIN);
intent.addCategory(TJIntent.JavaClass.CATEGORY_LAUNCHER);
ComponentName:=TJComponentName.JavaClass.init(
StringToJString('com.hlcx.hello'), //包名
StringToJString('com.hlcx.hello.ui.CardViewActivity') //具体页面的完整类名
);
intent.setComponent(ComponentName);
TAndroidHelper.Context.startActivity(intent);
end;
第三 打开支付宝页面
procedure TForm1.Button2Click(Sender: TObject);
var
intent: JIntent;
ComponentName:JComponentName;
PhoneUrl: Jnet_Uri;
begin
//打开支付宝页面
PhoneUrl := StrToJURI('alipayqr://platformapi/startapp?clientVersion=3.7.0.0718;');
Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW,
PhoneUrl);
TAndroidHelper.Context.startActivity(Intent);
end;
第四 打电话
procedure TForm1.Button3Click(Sender: TObject);
var
PhoneUrl: Jnet_Uri;
Intent: JIntent;
FDialingNumber,APhoneNumber:string;
begin
// 这里写电话号码
APhoneNumber:='12345789';
FDialingNumber := APhoneNumber.Replace('#', TNetEncoding.URL.Encode('#'));
PhoneUrl := StrToJURI(Format('tel:%s', [FDialingNumber]));
Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_CALL,
PhoneUrl);
TAndroidHelper.Context.startActivity(Intent);
end;
第五 直接跳转到支付宝转账页面
procedure TForm1.Button5Click(Sender: TObject);
var
PhoneUrl: Jnet_Uri;
Intent: JIntent;
surl:string;
begin
//这个字符串 不懂 百度 android 跳转到支付宝收款页面 替换成自己的收款码
surl:='intent://platformapi/startapp?saId=10000007&' +
'clientVersion=3.7.0.0718&qrcode=https%3A%2F%2Fqr.alipay.com%2FFKX060379IKLUWTZJGQ7F4%3F_s' +
'%3Dweb-other&_t=1472443966571#Intent;' +
'scheme=alipayqr;package=com.eg.android.AlipayGphone;end';
Intent := TJIntent.JavaClass.parseUri(stringToJstring(surl),
TJIntent.JavaClass.URI_INTENT_SCHEME);
TAndroidHelper.Context.startActivity(Intent);
FMX.Types.Log.d('跳转成功');
end;
第六 获取通话记录相关信息 时长 联系人 电话号码 通话时间......
procedure TForm1.Button4Click(Sender: TObject);
var
Filter: string;
Projection: TJavaObjectArray<JString>;
GroupCursor: JCursor;
temp:string;
begin
MEMO1.Lines.Clear;
MEMO1.Lines.Add('');
Projection := CreateJavaStringArray([TJCallLog_Calls.JavaClass.CACHED_NAME,
TJCallLog_Calls.JavaClass.NUMBER,
TJCallLog_Calls.JavaClass.DATE,
TJCallLog_Calls.JavaClass.DURATION]);
try
try
GroupCursor := TAndroidHelper.ContentResolver.query
(TJCallLog_Calls.JavaClass.CONTENT_URI, Projection,
nil, nil, TJCallLog_Calls.JavaClass.DEFAULT_SORT_ORDER);
if GroupCursor <> nil then
try
while GroupCursor.moveToNext do
begin
//得到通话姓名
temp:='';
temp:=' 姓名:'+JStringToString(
GroupCursor.getString(
GroupCursor.getColumnIndex(TJCallLog_Calls.JavaClass.CACHED_NAME)
));
//得到通话号码
temp:=temp+' 电话号码:'+JStringToString(
GroupCursor.getString(
GroupCursor.getColumnIndex(TJCallLog_Calls.JavaClass.NUMBER)
));
//得到通话时间 这里是时间戳 自己转换下就行了
temp:=temp+' 通话时间 :'+
GroupCursor.getLong(
GroupCursor.getColumnIndex(TJCallLog_Calls.JavaClass.DATE)
).ToString;
//得到通话时长
temp:=temp+' 通话时长s:'+
GroupCursor.getInt(
GroupCursor.getColumnIndex(TJCallLog_Calls.JavaClass.DURATION)
).ToString;
FMX.Types.Log.d(temp);
MEMO1.Lines.Add(temp);
end;
finally
GroupCursor.close;
end
except on E: EJNIException do
ShowMessage('抱歉 出错了') ;
end;
finally
Projection.Free;
end;
end;
第七 调用android 原生的Toast 吐司 显示位置 居中显示
procedure TForm1.Button6Click(Sender: TObject);
var
toast:JToast;
begin
toast:=TJToast.JavaClass.makeText(TAndroidHelper.Activity.getApplicationContext(),
StrToJCharSequence('你好,我是原生的Toast'),TJToast.JavaClass.LENGTH_SHORT);
toast.setGravity(17,0,0);
toast.show();
end;