Jump to content

Dave Nottage

Members
  • Content Count

    1626
  • Joined

  • Last visited

  • Days Won

    37

Everything posted by Dave Nottage

  1. Dave Nottage

    delphi camera focus

    Yet another wrong answer. This code only compares what the current mode currently is, with auto (which is not one of the continuous modes) - it does not compensate for what modes are supported
  2. Dave Nottage

    delphi camera focus

    Some do not support it, for example the Samsung S4 apparently does not.
  3. Dave Nottage

    delphi camera focus

    Most front cameras support fixed (TFocusMode.Locked) only. One way (likely the easiest) to resolve this would be to use a patched FMX.Media.Android unit. Copy the unit to the project folder and change this routine: procedure TAndroidVideoCaptureDevice.SetFocusMode(const AFocusMode: TFocusMode); var Params: JCamera_Parameters; // Patch code vars: LFocusModes: JList; LFocusMode: JString; I: Integer; LIsSupported: Boolean; begin Params := Camera.getParameters; if Params = nil then Exit; // Patch code BEGIN LIsSupported := False; LFocusModes := Params.getSupportedFocusModes; for I := 0 to LFocusModes.size - 1 do begin LFocusMode := TJString.Wrap(LFocusModes.get(I)); if ((AFocusMode = TFocusMode.AutoFocus) and LFocusMode.equals(TJCamera_Parameters.JavaClass.FOCUS_MODE_AUTO)) or ((AFocusMode = TFocusMode.Locked) and LFocusMode.equals(TJCamera_Parameters.JavaClass.FOCUS_MODE_FIXED)) or ((AFocusMode = TFocusMode.ContinuousAutoFocus) and LFocusMode.equals(TJCamera_Parameters.JavaClass.FOCUS_MODE_CONTINUOUS_PICTURE)) then begin LIsSupported := True; Break; end; end; if not LIsSupported then Exit; // Patch code END FFocusMode.Value := AFocusMode; UpdateFocusModeParameter(Params); Camera.setParameters(Params); SetAutoFocus; end; This means that if the mode is not supported, it doesn't try and change it, so it will remain either the default, or the last supported mode it was set to.
  4. Dave Nottage

    ChatGPT Example

    Because the URL is probably invalid. It does not appear to be documented anywhere. Because, as the error says, the request is bad. As I said: This should work as long as there's no characters that need escaping in the question variable: rest.PostData := '{"model": "text-davinci-003", "prompt": "' + question + '", "temperature": 0, "max_tokens": 64}';
  5. Dave Nottage

    ChatGPT Example

    Why did you choose not to include those in your post? Do the quotes here really need to be escaped? Is that URL documented somewhere? I'm unable to find it
  6. The jars I am referring to are not included in the jars that come with Delphi. A number of your answers are very plainly incorrect - you should refrain from doing that because it only confuses other developers.
  7. Remove them from Android 64-bit and add them to Android 32-bit. The IDE knows to use them for both when added there.
  8. It seems you may not have included the vision jars in your project, as per the readme.
  9. Dave Nottage

    Android 13 ask permission for push notification

    In AndroidManifest.template.xml, change %targetSdkVersion% to 33
  10. Dave Nottage

    Android 13 ask permission for push notification

    Yes, I'm having the same problem - I'm looking into it
  11. Dave Nottage

    Android 13 ask permission for push notification

    This value is incorrect - it should be android.permission.POST_NOTIFICATIONS
  12. Dave Nottage

    Android 13 ask permission for push notification

    Yes, you will need to manually add the permission to the manifest - one way is to modify AndroidManifest.template.xml to add: <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> A suitable location would be just below <%uses-permission%> You will also need to request the permission in your code, e.g: PermissionsService.RequestPermissions(['android.permission.POST_NOTIFICATIONS'], procedure(const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray) begin if AGrantResults[0] = TPermissionStatus.Granted then // Permission was granted end );
  13. Dave Nottage

    how can i handle the javascript result?

    This could be one way: unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.WebBrowser, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Edit, Androidapi.JNIBridge, Androidapi.JNI.WebKit, Androidapi.JNI.JavaTypes; type TJavaScriptResultEvent = procedure(Sender: TObject; const JavaScriptResult: string) of object; TJavaScriptValueCallback = class(TJavaLocal, JValueCallback) private FOnResult: TJavaScriptResultEvent; public { JValueCallback } procedure onReceiveValue(value: JObject); cdecl; public property OnResult: TJavaScriptResultEvent read FOnResult write FOnResult; end; TForm1 = class(TForm) WebBrowser: TWebBrowser; Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private FJavaScriptValueCallback: TJavaScriptValueCallback; procedure NewDateResultHandler(Sender: TObject; const AJavaScriptResult: string); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; var Form1: TForm1; implementation {$R *.fmx} uses Androidapi.Helpers; { TJavaScriptValueCallback } procedure TJavaScriptValueCallback.onReceiveValue(value: JObject); begin if Assigned(FOnResult) then FOnResult(Self, JStringToString(TJString.Wrap(value)).DeQuotedString('"')); end; { TForm1 } constructor TForm1.Create(AOwner: TComponent); begin inherited; FJavaScriptValueCallback := TJavaScriptValueCallback.Create; end; destructor TForm1.Destroy; begin FJavaScriptValueCallback.Free; inherited; end; procedure TForm1.NewDateResultHandler(Sender: TObject; const AJavaScriptResult: string); begin Edit1.Text := AJavaScriptResult; end; procedure TForm1.Button1Click(Sender: TObject); var LWebView: JWebView; begin if Supports(WebBrowser, JWebView, LWebView) then begin FJavaScriptValueCallback.OnResult := NewDateResultHandler; LWebView.evaluateJavascript(StringToJString('new Date()'), FJavaScriptValueCallback); end; end; end.
  14. Dave Nottage

    Delphi FMX Android - blocking push notifications permissions

    Modified code from the DW.FCMManager unit from this demo: function IsPushEnabled(const AChannelId: string): Boolean; var LService: JObject; LNotificationManager: JNotificationManager; LChannels: JList; LChannel: JNotificationChannel; I: Integer; begin LService := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.NOTIFICATION_SERVICE); LNotificationManager := TJNotificationManager.Wrap(TAndroidHelper.JObjectToID(LService)); Result := LNotificationManager.areNotificationsEnabled; if Result and (TJBuild_Version.JavaClass.SDK_INT >= 26) then begin LChannels := LNotificationManager.getNotificationChannels; for I := 0 to LChannels.size - 1 do begin LChannel := TJNotificationChannel.Wrap(LChannels.get(I)); if LChannel.getId.equals(StringToJString(AChannelId)) and (LChannel.getImportance = TJNotificationManager.JavaClass.IMPORTANCE_NONE) then begin Result := False; Break; end; end; end; end;
  15. Dave Nottage

    Erro PlayStore aab

    Google Translate says it is: "You are the man!"... I'll take that, thanks! 🙂
  16. Dave Nottage

    The problem of running the app on IOS

    Earlier, you said: If it does not run, the main form would not be displayed
  17. Dave Nottage

    Erro PlayStore aab

    Your intent-filter node is missing from the manifest. The activity node should look like this: <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity" android:label="MixPDV" android:exported = "true" android:configChanges="orientation|keyboard|keyboardHidden|screenSize" android:launchMode="singleTask"> <!-- Tell NativeActivity the name of our .so --> <meta-data android:name="android.app.lib_name" android:value="MixPDV" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
  18. Dave Nottage

    Erro PlayStore aab

    Did you set the option to generate 32-bit and 64-bit binaries in the Project Options?
  19. Dave Nottage

    The problem of running the app on IOS

    If the breakpoints are not disabled - ie like this: Then the code isn't being reached. Yet when you removed that part, the code in unit main executes? This is where a reproducible example would help.
  20. Dave Nottage

    The problem of running the app on IOS

    There's a difference between a breakpoint being disabled (which is indicated visually), versus one where the debugger does not stop. The latter can happen because the code where you have the breakpoint is never reached and/or you have a unit with the same name, and you're looking at the wrong one. Something specific to the platform. Detailing what you have in your datamodule might help (eg. data components used, what type of connection e.g SQLite, etc)
  21. Dave Nottage

    The problem of running the app on IOS

    So the problem is with the datamodule. Still? The screenshot you showed in an earlier message indicates they were not. Are you compiling for Debug?
  22. Dave Nottage

    The problem of running the app on IOS

    It's not advisable to have conditionals in your .dpr because the IDE can be prone to mess it up. In this case, the conditional for the Android unit is pointless anyway, since nothing from it is being referenced in the .dpr. This would not be the cause of your issue, but it's still something to consider. As @programmerdelphi2k inferred, it may be being caused by something happening in untDataModule. You could use the debugger to see what is executed there when it is created. Has it ever run OK on iOS? Either way, you could remove parts of the application that were previously added, to help isolate what is causing the lockup.
  23. Dave Nottage

    How to compile an app for Application store mode?

    You would have needed to have downloaded your developer profile, so I was assuming you knew how already.
  24. Dave Nottage

    How to compile an app for Application store mode?

    You need to create an Application ID (on the Apple Developer site, this is Identifiers), In general, you won't need to select any entitlements unless you plan on having Push Notifications in your app, in which case select that entitlement from the list For Description, use a description about your application (e.g. just the name), and for Bundle ID, the convention is to use a domain you have, in reverse, then the name of the application. The Description and Bundle ID pictured are just examples. You will also need a Provisioning Profile (in Profiles) for App Store:
  25. Dave Nottage

    contacts sample application does not want to run on device

    This demo starts/works OK on my Pixel 6 Pro, which has Android 13. I'm using Delphi 11.2 with Patch 1 installed. https://github.com/Embarcadero/RADStudio11Demos/tree/main/Object Pascal/Multi-Device Samples/Device Sensors and Services/Address Book/Contacts
×