add device info collector

This commit is contained in:
aria committed 2026-04-17 16:14:59 +09:00
1 parent 4140922530
commit 1c3886e10c
4 files changed
+177

No files matched your search

+88
View File
@@ -11,6 +11,7 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.hardware.biometrics.BiometricManager;
import android.hardware.biometrics.BiometricPrompt;
@@ -47,11 +48,14 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.TimeZone;
import java.util.UUID;
import java.util.concurrent.Executor;
public class BluememeUtils extends CordovaPlugin {
private static final String TAG = "BluememeUtils";
private static final String PREFS = "bluememe_utils";
private static final String KEY_DEVICE_KEY = "device_key";
private static final String KEY_FCM_TOKEN = "fcm_token";
private static final String KEY_INITIAL_NOTIFICATION = "initial_notification";
private static final String ACTION_SUFFIX = ".BLUEMEME_UTILS_EVENT";
@@ -75,6 +79,10 @@ public class BluememeUtils extends CordovaPlugin {
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if ("getDeviceInfo".equals(action)) {
getDeviceInfo(callbackContext);
return true;
}
if ("saveWifi".equals(action)) {
saveWifi(args.optJSONObject(0), callbackContext);
return true;
@@ -184,6 +192,32 @@ public class BluememeUtils extends CordovaPlugin {
}
}
private void getDeviceInfo(CallbackContext callbackContext) {
Context context = cordova.getActivity().getApplicationContext();
try {
JSONObject result = new JSONObject();
PackageInfo packageInfo = packageInfo(context);
result.put("deviceKey", getOrCreateDeviceKey(context));
result.put("platform", "Android");
result.put("appIdentifier", context.getPackageName());
result.put("appVersion", packageInfo == null || packageInfo.versionName == null ? "" : packageInfo.versionName);
result.put("buildNumber", packageInfo == null ? "" : String.valueOf(packageVersionCode(packageInfo)));
result.put("osVersion", Build.VERSION.RELEASE == null ? "" : Build.VERSION.RELEASE);
result.put("sdkVersion", Build.VERSION.SDK_INT);
result.put("deviceModel", deviceModel());
result.put("manufacturer", Build.MANUFACTURER == null ? "" : Build.MANUFACTURER);
result.put("brand", Build.BRAND == null ? "" : Build.BRAND);
result.put("model", Build.MODEL == null ? "" : Build.MODEL);
result.put("locale", currentLocaleTag());
result.put("timeZone", TimeZone.getDefault().getID());
callbackContext.success(result);
} catch (Exception ex) {
sendError(callbackContext, "DEVICE_INFO_FAILED", ex.getMessage());
}
}
private void connectWifi(JSONObject options, CallbackContext callbackContext) {
JSONObject normalized = normalizeWifiOptions(options);
String validationError = validateWifiOptions(normalized);
@@ -1124,6 +1158,60 @@ public class BluememeUtils extends CordovaPlugin {
return value == null ? "" : String.valueOf(value);
}
private static PackageInfo packageInfo(Context context) {
try {
PackageManager packageManager = context.getPackageManager();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
return packageManager.getPackageInfo(context.getPackageName(), PackageManager.PackageInfoFlags.of(0));
}
return packageManager.getPackageInfo(context.getPackageName(), 0);
} catch (PackageManager.NameNotFoundException ex) {
Log.w(TAG, "Unable to read package info.", ex);
return null;
}
}
private static long packageVersionCode(PackageInfo packageInfo) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
return packageInfo.getLongVersionCode();
}
return packageInfo.versionCode;
}
private static String getOrCreateDeviceKey(Context context) {
SharedPreferences preferences = prefs(context);
String existing = preferences.getString(KEY_DEVICE_KEY, "");
if (!TextUtils.isEmpty(existing)) {
return existing;
}
String generated = UUID.randomUUID().toString();
preferences.edit().putString(KEY_DEVICE_KEY, generated).apply();
return generated;
}
private static String deviceModel() {
String manufacturer = Build.MANUFACTURER == null ? "" : Build.MANUFACTURER;
String model = Build.MODEL == null ? "" : Build.MODEL;
if (TextUtils.isEmpty(manufacturer)) {
return model;
}
if (TextUtils.isEmpty(model)) {
return manufacturer;
}
if (model.toLowerCase(Locale.US).startsWith(manufacturer.toLowerCase(Locale.US))) {
return model;
}
return manufacturer + " " + model;
}
private static String currentLocaleTag() {
Locale locale = Locale.getDefault();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return locale.toLanguageTag();
}
return locale.toString();
}
static String eventAction(Context context) {
return context.getPackageName() + ACTION_SUFFIX;
}