This is an old tutorial. It will not work on new versions of Android. You should either generate a random value when the app starts for the first time or use the advertising id: https://www.b4x.com/android/forum/threads/advertising-id.101050/#content
This tutorial is based on the following blog post: Identifying App Installations | Android Developers Blog
The standard way to get a unique id is using PhoneId.GetDeviceId. However this method has several disadvantages:
- It requires the "android.permission.READ_PHONE_STATE" permission which is quite a sensitive permission.
- It doesn't work on devices without phone functionality.
- Apparently there is a bug in some devices which return the same id.
Starting from Android 2.3 there is a new field that returns a unique id and should work on all devices (without requiring any permission).
A general solution is to use this field for modern devices and to use a "fake" id for older devices. The fake id is randomly created when the application first runs.
Here is the code (requires the Reflection library):
This tutorial is based on the following blog post: Identifying App Installations | Android Developers Blog
The standard way to get a unique id is using PhoneId.GetDeviceId. However this method has several disadvantages:
- It requires the "android.permission.READ_PHONE_STATE" permission which is quite a sensitive permission.
- It doesn't work on devices without phone functionality.
- Apparently there is a bug in some devices which return the same id.
Starting from Android 2.3 there is a new field that returns a unique id and should work on all devices (without requiring any permission).
A general solution is to use this field for modern devices and to use a "fake" id for older devices. The fake id is randomly created when the application first runs.
Here is the code (requires the Reflection library):
B4X:
Sub Activity_Create(FirstTime As Boolean)
Log(GetDeviceId)
End Sub
Sub GetDeviceId As String
Dim r As Reflector
Dim Api As Int
Api = r.GetStaticField("android.os.Build$VERSION", "SDK_INT")
If Api < 9 Then
'Old device
If File.Exists(File.DirInternal, "__id") Then
Return File.ReadString(File.DirInternal, "__id")
Else
Dim id As Int
id = Rnd(0x10000000, 0x7FFFFFFF)
File.WriteString(File.DirInternal, "__id", id)
Return id
End If
Else
'New device
Return r.GetStaticField("android.os.Build", "SERIAL")
End If
End Sub
Last edited: