Jump to content

Dave Nottage

Members
  • Content Count

    1626
  • Joined

  • Last visited

  • Days Won

    37

Everything posted by Dave Nottage

  1. Dave Nottage

    Android hdd serial number

    If there's a class called that, it's undocumented. If you're after a unique id for the device, you're probably better off using something like this: uses Androidapi.JNI.Provider, Androidapi.Helpers; // **** NOTE: Use this value with care, as it is reset if the device is rooted, or wiped function GetUniqueDeviceID: string; var LName: JString; begin LName := TJSettings_Secure.JavaClass.ANDROID_ID; Result := JStringToString(TJSettings_Secure.JavaClass.getString(TAndroidHelper.ContentResolver, LName)); end;
  2. You would if you included the Indy source path. If the callstack says it's being used, you're using it. Does your app use any tethering functionality? That ultimately includes Indy units.
  3. Dave Nottage

    Android hdd serial number

    I'm assuming he means any file-based media that it can access. This may be of use to you: uses Androidapi.JNI.JavaTypes, Androidapi.JNIBridge, Androidapi.JNI.Os, Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers; type JStorageManager = interface; JStorageVolume = interface; JStorageManagerClass = interface(JObjectClass) ['{0F83E5E0-9AE5-41F8-9FA1-E91CABBC6720}'] function _GetACTION_MANAGE_STORAGE: JString; cdecl; function _GetEXTRA_REQUESTED_BYTES: JString; cdecl; function _GetEXTRA_UUID: JString; cdecl; function _GetUUID_DEFAULT: JUUID; cdecl; property ACTION_MANAGE_STORAGE: JString read _GetACTION_MANAGE_STORAGE; property EXTRA_REQUESTED_BYTES: JString read _GetEXTRA_REQUESTED_BYTES; property EXTRA_UUID: JString read _GetEXTRA_UUID; property UUID_DEFAULT: JUUID read _GetUUID_DEFAULT; end; [JavaSignature('android/os/storage/StorageManager')] JStorageManager = interface(JObject) ['{A7190FB5-1DBE-4A4E-8A21-A6215C00243C}'] function getAllocatableBytes(storageUuid: JUUID): Int64; cdecl; function getCacheQuotaBytes(storageUuid: JUUID): Int64; cdecl; function getCacheSizeBytes(storageUuid: JUUID): Int64; cdecl; function getMountedObbPath(rawPath: JString): JString; cdecl; function getPrimaryStorageVolume: JStorageVolume; cdecl; function getStorageVolume(&file: JFile): JStorageVolume; cdecl; function getStorageVolumes: JList; cdecl; function getUuidForPath(path: JFile): JUUID; cdecl; function isAllocationSupported(fd: JFileDescriptor): boolean; cdecl; function isCacheBehaviorGroup(path: JFile): boolean; cdecl; function isCacheBehaviorTombstone(path: JFile): boolean; cdecl; function isEncrypted(&file: JFile): boolean; cdecl; function isObbMounted(rawPath: JString): boolean; cdecl; function mountObb(rawPath: JString; key: JString; listener: JOnObbStateChangeListener): boolean; cdecl; // function openProxyFileDescriptor(mode : Integer; callback : JProxyFileDescriptorCallback; handler : JHandler) : JParcelFileDescriptor; cdecl; function unmountObb(rawPath: JString; force: boolean; listener: JOnObbStateChangeListener): boolean; cdecl; procedure allocateBytes(fd: JFileDescriptor; bytes: Int64); cdecl; overload; procedure allocateBytes(storageUuid: JUUID; bytes: Int64); cdecl; overload; procedure setCacheBehaviorGroup(path: JFile; group: boolean); cdecl; procedure setCacheBehaviorTombstone(path: JFile; tombstone: boolean); cdecl; end; TJStorageManager = class(TJavaGenericImport<JStorageManagerClass, JStorageManager>) end; JStorageVolumeClass = interface(JObjectClass) ['{C11D1D2A-77D0-4D1A-B4B9-5042B60BADB0}'] function _GetCREATOR: JParcelable_Creator; cdecl; function _GetEXTRA_STORAGE_VOLUME: JString; cdecl; property CREATOR: JParcelable_Creator read _GetCREATOR; property EXTRA_STORAGE_VOLUME: JString read _GetEXTRA_STORAGE_VOLUME; end; [JavaSignature('android/os/storage/StorageVolume')] JStorageVolume = interface(JObject) ['{F6555252-D4E1-405B-BAAB-2C8F59A01F41}'] function createAccessIntent(directoryName: JString): JIntent; cdecl; function describeContents: Integer; cdecl; function equals(obj: JObject): boolean; cdecl; function getDescription(context: JContext): JString; cdecl; function getState: JString; cdecl; function getUuid: JString; cdecl; function hashCode: Integer; cdecl; function isEmulated: boolean; cdecl; function isPrimary: boolean; cdecl; function isRemovable: boolean; cdecl; function toString: JString; cdecl; procedure writeToParcel(parcel: JParcel; flags: Integer); cdecl; end; TJStorageVolume = class(TJavaGenericImport<JStorageVolumeClass, JStorageVolume>) end; procedure TForm1.Button1Click(Sender: TObject); var LService: JObject; LStorageManager: JStorageManager; LVolumes: JList; LVolume: JStorageVolume; I: Integer; begin LService := TAndroidHelper.Activity.getSystemService(TJContext.JavaClass.STORAGE_SERVICE); LStorageManager := TJStorageManager.Wrap(TAndroidHelper.JObjectToID(LService)); LVolumes := LStorageManager.getStorageVolumes; for I := 0 to LVolumes.size - 1 do begin LVolume := TJStorageVolume.Wrap(LVolumes.get(I)); Memo1.Lines.Add(Format('%s (%s)', [JStringToString(LVolume.getDescription(TAndroidHelper.Context)), JStringToString(LVolume.getUuid)])); end; end;
  4. Yes, you are. Easiest way to track down where is to check the units compiled units (.dcu files)
  5. Dave Nottage

    How to disable automatic adding of units to interface-uses

    Change the ClassGroup property on the service (data) module to System.Classes.TPersistent before adding any components
  6. You should consider compiling the text into the app and loading it as a resource. See here: https://stackoverflow.com/a/8943364/3164070
  7. Dave Nottage

    Using Facebook SDK in Firemonkey (iOS and Android)

    I'm sure there is, since there's been a number of changes in the last 3 years. Check the changelog for v5, for example: https://github.com/facebook/facebook-ios-sdk/blob/master/CHANGELOG.md
  8. Dave Nottage

    Android Service using local sqlite DB

    That's just the timer. Battery life will be affected by the settings used with the actual location services, as determined by MonitoringDistance and MonitoringInterval. There's some information here about the best strategies to use: https://developer.android.com/guide/topics/location/strategies
  9. The ActiveMobileDevice tag in the .dproj.local file has info about connected devices. Whether it retains "old" devices I don't know.
  10. Dave Nottage

    Android 64bit and 32bit permissions

    You don't have Read Call Log and Read Phone Numbers permissions set in the Project Options for Android 64-bit.
  11. Dave Nottage

    Linker errors when including Facebook SDK on iOS12

    If you're still having trouble, please look at line 175 here: https://github.com/DelphiWorlds/KastriFree/blob/master/API/DW.iOSapi.Firebase.pas Basically forces the linker to link to libclang_rt.ios.a, which has the "missing" symbol
  12. Dave Nottage

    Just wanted to brag a bit :-)

    That is awesome! Great news
  13. Glad to hear it's helping you! 🙂
  14. Dave Nottage

    Android Service using local sqlite DB

    I've just checked in changes to this demo that include posting the location updates to a SQLite database. Service starts OK in it, at least for me.
  15. Dave Nottage

    Android Service using local sqlite DB

    I doubt it, since my device is Android 10. I'll have a play around tomorrow to see what I can deduce.
  16. Dave Nottage

    Android Service using local sqlite DB

    Mine works OK with that unit in it.
  17. Dave Nottage

    Stable remote control using Indy TCP/IP

    OK, for some reason I was under the impression that it was being raised when the socket was closed without an attempted read/write. I'll have to revisit that, thanks 🙂
  18. Dave Nottage

    Stable remote control using Indy TCP/IP

    It's the most annoying exception, ever. It's a permanent "ignore" in my exception tracking code. It'd be great if it was just removed, permanently.
  19. Dave Nottage

    Is anybody using Indy on Android/iOS in Delphi?

    Compiles OK here.
  20. I'm able to use FireDAC with SQLite OK in the demo you refer to. Can you provide a test project for the TDSRestConnection issue?
  21. Dave Nottage

    Open jpg Image as Text File

    There's an image here with EXIF data: http://orchids.enwphotos.com/2013-1/310.html Which includes the camera make etc. I use a Chrome plugin to view the data: https://chrome.google.com/webstore/detail/exif-viewer/mmbhfeiddhndihdjeganjggkmjapkffm I doubt it, since the camera make and model is in text form, not an index to different models Are you referring to Delphi code? Also, description and title are not known tags - perhaps you're referring to ImageDescription? There's a list here: https://www.exiv2.org/tags.html. Note that not all images will have anything in this tag. There's an answer on SO that suggests a simpler method of extracting EXIF at least in relation to JPEGs: https://stackoverflow.com/a/18624442/3164070 There's also a couple of alternatives to CCR-EXIF, here: https://torry.net/pages.php?id=104
  22. Dave Nottage

    Open jpg Image as Text File

    I suspect that attaching an image file here strips the metadata, since the one you attached appears to have none, or at least the EXIF data is gone.
  23. Dave Nottage

    iOS Firebase Push Notifications

    Whoops! Yeah, I actually discovered that after my comment on the report. I've now updated it. Please refer to my comments on the report: https://quality.embarcadero.com/browse/RSP-18329
  24. Incidentally, I suspect that leaving it "acquired" can consume a lot of battery (due to what happened to my device), so it might pay to check when the screen locks and do a release.
×