115 lines
3.7 KiB
JavaScript
115 lines
3.7 KiB
JavaScript
//获取mac地址
|
||
|
||
// "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>"
|
||
// "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>"
|
||
// "<uses-permission android:name=\"android.permission.NETWORK_STACK\" />"
|
||
// "<uses-permission android:name=\"android.permission.INTERNET\" />"
|
||
export function getMacAddress() {
|
||
try {
|
||
var NetworkInterface = plus.android.importClass('java.net.NetworkInterface')
|
||
var interfaces = NetworkInterface.getNetworkInterfaces()
|
||
|
||
// 直接使用 Enumeration 的方法(而非 Iterator)
|
||
while (plus.android.invoke(interfaces, 'hasMoreElements')) {
|
||
var intf = plus.android.invoke(interfaces, 'nextElement')
|
||
var name = plus.android.invoke(intf, 'getName')
|
||
|
||
if (name === 'wlan0' || name === 'eth0' || name === 'wlan1') {
|
||
var macBytes = plus.android.invoke(intf, 'getHardwareAddress')
|
||
if (macBytes) {
|
||
var macStr = Array.from(macBytes)
|
||
.map(byte => (byte & 0xff).toString(16).padStart(2, '0'))
|
||
.join(':')
|
||
.toUpperCase()
|
||
console.log('MAC Address:', macStr)
|
||
return macStr
|
||
}
|
||
}
|
||
}
|
||
|
||
console.error('No valid MAC address found')
|
||
return null
|
||
} catch (e) {
|
||
console.error('Failed to get MAC address:', e)
|
||
return null
|
||
}
|
||
}
|
||
// 获取唯一设备ID
|
||
export function getDeviceId() {
|
||
var settings = plus.android.importClass('android.provider.Settings')
|
||
var Secure = settings.Secure
|
||
var context = plus.android.runtimeMainActivity()
|
||
var androidId = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID)
|
||
return androidId
|
||
}
|
||
// 备用方案 获取UUID
|
||
export function generateUUID() {
|
||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
||
var r = (Math.random() * 16) | 0,
|
||
v = c == 'x' ? r : (r & 0x3) | 0x8
|
||
return v.toString(16)
|
||
})
|
||
}
|
||
// <uses-permission android:name="android.permission.BLUETOOTH" />
|
||
/**
|
||
* 获取蓝牙 MAC 地址(兼容 Android 5.0+)
|
||
* @returns {string|null} MAC 地址(格式 "XX:XX:XX:XX:XX:XX"),失败返回 null
|
||
*/
|
||
function getBluetoothMacLegacy() {
|
||
if (plus.os.name !== 'Android') {
|
||
console.error('仅支持 Android')
|
||
return null
|
||
}
|
||
|
||
try {
|
||
const BluetoothAdapter = plus.android.importClass('android.bluetooth.BluetoothAdapter')
|
||
const adapter = BluetoothAdapter.getDefaultAdapter()
|
||
if (!adapter) {
|
||
console.error('蓝牙未启用')
|
||
return null
|
||
}
|
||
|
||
const mac = plus.android.invoke(adapter, 'getAddress')
|
||
if (mac && mac !== '02:00:00:00:00:00') {
|
||
return mac
|
||
}
|
||
return null
|
||
} catch (e) {
|
||
console.error('获取失败:', e)
|
||
return null
|
||
}
|
||
}
|
||
function getBluetoothMacModern() {
|
||
try {
|
||
const Context = plus.android.importClass('android.content.Context')
|
||
const BluetoothManager = plus.android.importClass('android.bluetooth.BluetoothManager')
|
||
|
||
const mainActivity = plus.android.runtimeMainActivity()
|
||
const bluetoothManager = mainActivity.getSystemService(Context.BLUETOOTH_SERVICE)
|
||
const adapter = plus.android.invoke(bluetoothManager, 'getAdapter')
|
||
|
||
if (!adapter) return null
|
||
|
||
const mac = plus.android.invoke(adapter, 'getAddress')
|
||
return mac && mac !== '02:00:00:00:00:00' ? mac : null
|
||
} catch (e) {
|
||
console.error('BluetoothManager 方式失败:', e)
|
||
return null
|
||
}
|
||
}
|
||
export function getBluetoothMacAddress() {
|
||
const Build = plus.android.importClass('android.os.Build')
|
||
const isModernAndroid = Build.VERSION.SDK_INT >= 23 // Android 6.0+
|
||
|
||
// 先尝试新方法,再回退旧方法
|
||
const mac = isModernAndroid ? getBluetoothMacModern() : getBluetoothMacLegacy()
|
||
|
||
if (mac) {
|
||
console.log('获取到蓝牙 MAC:', mac)
|
||
return mac
|
||
} else {
|
||
console.error('无法获取真实 MAC')
|
||
return null
|
||
}
|
||
}
|