在 Delphi 中,我试图使用Intent将Android应用中的用户发送到设备的默认Map应用(Google Maps、Waze等)。意图的目的是基于Lat/Lng坐标请求从当前位置到另一位置的方向。它在以前的Android和 Delphi 版本中运行良好,但这段代码在Android 13中无法运行。从我所读到的权限来看,似乎除了Andriod 11之外还有更多的限制。
无论如何,当我点击应用程序中的导航按钮时,我一直收到“未找到接收器”的消息。
My AndroidManifest.xml显示了以下位置权限:
android:targetSdkVersion="32" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
下面是我的Navigate button click事件代码:
procedure TMainForm.NavigateBtnClick(Sender: TObject);
var
{$IFDEF ANDROID}
Intent: JIntent; //Declares the intent object
{$ENDIF}
LGoogleMapsURL: String;
begin
// Populate a string to send to Mapping app
LGoogleMapsURL:= 'google.navigation:q=37.422219,-122.08364&mode=d';
{$IFDEF MSWINDOWS}
WebBrowser1.Navigate(LGoogleMapsURL);
{$ENDIF}
{$IFDEF ANDROID}
Intent := TJIntent.Create;
Intent.setData(StrToJURI(LGoogleMapsURL));
Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(LGoogleMapsURL));
if MainActivity.getPackageManager.queryIntentActivities(Intent, TJPackageManager.JavaClass.MATCH_DEFAULT_ONLY).size > 0 then
begin
MainActivity.startActivity(Intent);
end
else
ShowMessage('Receiver not found');
{$ENDIF}
end;
这是否不再适用于Android 13或缺少某些内容?
1条答案
按热度按时间qco9c6ql1#
为了让你的例子工作,我需要:
修改AndroidManifest.template.xml,将
<queries>
标签更改为:(see here)
..并修改代码:
也就是说,使用
queryIntentActivities
并不是真正必要的,除非你真的想看看哪些Activity可以处理Intent。URI
的类型为:Jnet_Uri
如果您想查询其他包,那么您大概需要在
<queries>
标记中有相应的条目