PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 25 → Marca, modelo, imei, se é celular, tablet ou computador, como identificar o dispositivo que está usando um site ou um aplicativo Mobile ?
Marca, modelo, imei, se é celular, tablet ou computador, como identificar o dispositivo que está usando um site ou um aplicativo Mobile ?
Iniciado por Boller, 04,may. 2023 02:35 - No hay respuesta
Miembro registrado
4.521 mensajes
Publicado el 04,mayo 2023 - 02:35
ChatGPT

Este código de identificação de um celular Android visa obter informações detalhadas sobre o dispositivo. No entanto, o código apresentado tem alguns problemas que precisam ser corrigidos. Vamos analisar o código e propor as correções necessárias.

Primeiro, o método getDeviceName() deve estar dentro de uma classe. Além disso, as variáveis devem ser declaradas com a primeira letra minúscula, e os nomes de variáveis devem ser separados por um sublinhado ou em camelCase. A palavra-chave 'IF' e 'ELSE' também deve ser em letras minúsculas.

Aqui está o código corrigido:

java
Copy code


import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.*;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;
import android.provider.Settings.Secure;

public class DeviceInfoActivity extends Activity {
// ...

public static String getDeviceName() {
String manufacturer = android.os.Build.MANUFACTURER;
String model = android.os.Build.MODEL;
String brand = android.os.Build.BRAND;
String product = android.os.Build.PRODUCT;
String board = android.os.Build.BOARD;
String bootloader = android.os.Build.BOOTLOADER;
String cpu_abi = android.os.Build.CPU_ABI;
String cpu_abi2 = android.os.Build.CPU_ABI2;
String device = android.os.Build.DEVICE;
String display = android.os.Build.DISPLAY;
String fingerprint = android.os.Build.FINGERPRINT;
String hardware = android.os.Build.HARDWARE;
String host = android.os.Build.HOST;
String id = android.os.Build.ID;
String radio = android.os.Build.RADIO;
String serial = android.os.Build.SERIAL;
String tags = android.os.Build.TAGS;
String type = android.os.Build.TYPE;
String user = android.os.Build.USER;

if (model.startsWith(manufacturer)) {
return model;
} else {
String marcaModeloCelular = "manufacturer: " + manufacturer + "; model: " + model + "; brand: " + brand + "; product: " + product + "; board:" + board + "; bootloader: " + bootloader + "; cpu_abi: " + cpu_abi + "; cpu_abi2: " + cpu_abi2 + "; device: " + device + "; display: " + display + "; fingerprint: " + fingerprint + "; hardware: " + hardware + "; host: " + host + "; id: " + id + "; radio: " + radio + "; serial: " + serial + "; tags: " + tags + "; type: " + type + "; user: " + user;

marcaModeloCelular = marcaModeloCelular.toUpperCase();

return marcaModeloCelular;
}
}
}


Com estas correções, o método getDeviceName() pode ser chamado para obter informações detalhadas sobre o dispositivo Android em questão.




User
Como pegar o mac address do celular pelo Android Java


ChatGPT
No Android, você pode obter o endereço MAC da interface Wi-Fi usando o WifiManager e o WifiInfo. Aqui está um exemplo de como fazer isso em Java:

Adicione a permissão necessária no arquivo AndroidManifest.xml:
xml
Copy code
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Crie um método para obter o endereço MAC:
java
Copy code


import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;

public class MainActivity extends AppCompatActivity {

// ...

public String getMacAddress() {
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();

String macAddress = wifiInfo.getMacAddress();
if (macAddress == null) {
macAddress = "Não foi possível obter o endereço MAC";
}

return macAddress;
}
}


No método getMacAddress(), estamos obtendo uma instância do WifiManager e, em seguida, usando-o para obter as informações da conexão Wi-Fi atual, representadas pelo objeto WifiInfo. O endereço MAC pode ser obtido chamando o método getMacAddress() em WifiInfo.

Nota: A partir do Android 6.0 (API nível 23), o método getMacAddress() retorna o valor "02:00:00:00:00:00" por razões de privacidade. Para contornar isso, você pode solicitar a localização do usuário e usar o WifiManager.getScanResults() para obter informações sobre as redes Wi-Fi disponíveis, incluindo o endereço MAC do ponto de acesso. No entanto, essa abordagem não fornecerá o endereço MAC da interface Wi-Fi do próprio dispositivo, mas sim dos pontos de acesso ao redor.




User
Para obter o número do telefone por Android Java


ChatGPT
Para obter o número de telefone do dispositivo Android, você pode usar a classe TelephonyManager. Primeiro, adicione as permissões necessárias ao arquivo AndroidManifest.xml:

xml
Copy code
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" /> <!-- A partir do Android 8.0 (API 26) -->
Em seguida, você pode criar um método para obter o número de telefone:

java
Copy code


import android.content.Context;
import android.telephony.TelephonyManager;

public class MainActivity extends AppCompatActivity {

// ...

public String getPhoneNumber() {
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_NUMBERS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_PHONE_NUMBERS}, 1);
return "Permissão não concedida";
}

String phoneNumber = telephonyManager.getLine1Number();
if (phoneNumber == null) {
phoneNumber = "Não foi possível obter o número de telefone";
}

return phoneNumber;
}
}


No método getPhoneNumber(), estamos obtendo uma instância do TelephonyManager e verificando se temos as permissões necessárias. Caso contrário, solicitamos as permissões ao usuário. Se tivermos permissão, usamos o método getLine1Number() para obter o número de telefone.

Nota: A capacidade de obter o número de telefone usando getLine1Number() não é garantida em todos os dispositivos e pode depender do cartão SIM, da operadora e das configurações do dispositivo. Além disso, é uma prática recomendada solicitar o número de telefone do usuário diretamente, em vez de tentar obtê-lo automaticamente, para garantir a precisão e a privacidade do usuário.




User
Para obter o IMEI do celular por Android Java


ChatGPT
Para obter o IMEI (International Mobile Equipment Identity) do dispositivo Android, você pode usar a classe TelephonyManager. Primeiro, adicione a permissão necessária ao arquivo AndroidManifest.xml:

xml
Copy code
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
Em seguida, você pode criar um método para obter o IMEI:

java
Copy code


import android.content.Context;
import android.telephony.TelephonyManager;
import android.content.pm.PackageManager;
import androidx.core.app.ActivityCompat;
import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;

public class MainActivity extends AppCompatActivity {

// ...

public String getIMEI() {
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 1);
return "Permissão não concedida";
}

String imei;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
imei = telephonyManager.getImei();
} else {
imei = telephonyManager.getDeviceId(); // Deprecated in API level 26
}

if (imei == null) {
imei = "Não foi possível obter o IMEI";
}

return imei;
}
}


No método getIMEI(), estamos obtendo uma instância do TelephonyManager e verificando se temos a permissão necessária. Caso contrário, solicitamos a permissão ao usuário. Se tivermos permissão, usamos o método getImei() (para Android 8.0 e superior) ou getDeviceId() (para versões anteriores do Android, mas este método foi descontinuado no nível de API 26) para obter o IMEI.

Nota: A partir do Android 10 (API nível 29), o acesso ao IMEI é restrito e a maioria dos aplicativos não poderá acessá-lo. Apenas aplicativos com a permissão especial READ_PRIVILEGED_PHONE_STATE concedida pelo fabricante do dispositivo ou pela operadora de telefonia móvel poderão acessar o IMEI. Para a maioria dos casos de uso, é recomendável usar a API AdvertisingIdClient para obter um identificador não pessoalmente identificável ou solicitar o identificador do usuário diretamente.




User
Para obter o ddd de um celular Android Java


ChatGPT
Para obter o código DDD (Discagem Direta a Distância) do número de telefone do usuário, você pode utilizar a classe TelephonyManager. O DDD pode ser extraído do número de telefone do usuário. Aqui está um exemplo de como fazer isso em Java:

Adicione as permissões necessárias ao arquivo AndroidManifest.xml:
xml
Copy code


<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" /> <!-- A partir do Android 8.0 (API 26) -->

Crie um método para obter o número de telefone e extrair o DDD:
java
Copy code


import android.content.Context;
import android.telephony.TelephonyManager;
import android.content.pm.PackageManager;
import androidx.core.app.ActivityCompat;
import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;

public class MainActivity extends AppCompatActivity {

// ...

public String getDDD() {
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_NUMBERS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_PHONE_NUMBERS}, 1);
return "Permissão não concedida";
}

String phoneNumber = telephonyManager.getLine1Number();

if (phoneNumber == null) {
return "Não foi possível obter o número de telefone";
}

// Supondo que o número de telefone esteja no formato +55DDDNúmero, onde DDD é o código de área brasileiro.
if (phoneNumber.startsWith("+55") && phoneNumber.length() > 5) {
String ddd = phoneNumber.substring(3, 5);
return ddd;
} else {
return "Formato de número desconhecido";
}
}
}


No método getDDD(), estamos obtendo uma instância do TelephonyManager, verificando e solicitando as permissões necessárias. Em seguida, usamos o método getLine1Number() para obter o número de telefone. Com base no formato do número de telefone, extraímos o DDD.

Nota: A capacidade de obter o número de telefone usando getLine1Number() não é garantida em todos os dispositivos e pode depender do cartão SIM, da operadora e das configurações do dispositivo. Além disso, o exemplo acima pressupõe que o número de telefone está no formato brasileiro (+55DDDNúmero). Dependendo da região e do formato do número de telefone, você pode precisar ajustar a lógica de extração do DDD. É uma prática recomendada solicitar o número de telefone do usuário diretamente, em vez de tentar obtê-lo automaticamente, para garantir a precisão e a privacidade do usuário.




User
Para saber o país do número do telefone Android java


ChatGPT
Para determinar o país com base no número de telefone, você pode usar a biblioteca libphonenumber do Google. Essa biblioteca oferece funções para analisar, formatar e validar números de telefone internacionalmente.

Primeiro, adicione a dependência libphonenumber ao arquivo build.gradle do seu projeto:

groovy
Copy code
dependencies {
implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.37'
}
Agora, você pode criar um método para obter o país com base no número de telefone:

java
Copy code


import android.content.Context;
import android.telephony.TelephonyManager;
import android.content.pm.PackageManager;
import androidx.core.app.ActivityCompat;
import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber;

public class MainActivity extends AppCompatActivity {

// ...

public String getCountryFromPhoneNumber() {
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_NUMBERS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_PHONE_NUMBERS}, 1);
return "Permissão não concedida";
}

String phoneNumber = telephonyManager.getLine1Number();

if (phoneNumber == null) {
return "Não foi possível obter o número de telefone";
}

PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
try {
Phonenumber.PhoneNumber parsedPhoneNumber = phoneNumberUtil.parse(phoneNumber, null);
String countryCode = phoneNumberUtil.getRegionCodeForNumber(parsedPhoneNumber);

if (countryCode != null) {
return countryCode;
} else {
return "Não foi possível determinar o país";
}
} catch (Exception e) {
return "Erro ao analisar o número de telefone";
}
}
}


O método getCountryFromPhoneNumber() obtém o número de telefone usando o TelephonyManager e, em seguida, utiliza a biblioteca libphonenumber para analisar o número de telefone e determinar o código do país. Retorna o código do país (por exemplo, "BR" para Brasil) se for possível determiná-lo; caso contrário, retorna uma mensagem de erro.

Nota: A capacidade de obter o número de telefone usando getLine1Number() não é garantida em todos os dispositivos e pode depender do cartão SIM, da operadora e das configurações do dispositivo. É uma prática recomendada solicitar o número de telefone do usuário diretamente, em vez de tentar obtê-lo automaticamente, para garantir a precisão e a privacidade do usuário.




User
Com a linguagem swift gere os mesmos exemplos acima para iOS


ChatGPT
No iOS, você não pode acessar diretamente o número de telefone, IMEI ou DDD do usuário devido a restrições de privacidade. No entanto, você pode identificar um dispositivo usando o identifierForVendor, que é um identificador exclusivo para cada aplicativo no dispositivo. Também é possível solicitar o número de telefone do usuário por meio de uma interface do usuário.

Aqui está um exemplo de como obter o identifierForVendor em Swift:

swift
Copy code


import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

if let identifierForVendor = UIDevice.current.identifierForVendor {
print("Identifier for Vendor: \(identifierForVendor.uuidString)")
} else {
print("Não foi possível obter o identifierForVendor")
}
}
}


Para solicitar o número de telefone do usuário, você pode usar um UITextField para permitir que o usuário insira seu número de telefone:

Adicione um UITextField e um UIButton no Interface Builder ou Storyboard.
Conecte os elementos de interface do usuário ao seu código usando @IBOutlet e @IBAction.
Crie um método para lidar com o evento do botão e extrair o número de telefone e o código do país do campo de texto.
swift
Copy code


import UIKit

class ViewController: UIViewController {

@IBOutlet weak var phoneNumberTextField: UITextField!

override func viewDidLoad() {
super.viewDidLoad()
}

@IBAction func submitPhoneNumber(_ sender: UIButton) {
if let phoneNumber = phoneNumberTextField.text, !phoneNumber.isEmpty {
print("Número de telefone do usuário: \(phoneNumber)")

// Você pode usar a biblioteca 'libPhoneNumber' para analisar e extrair informações adicionais do número de telefone, como DDD e país.
// Consulte a resposta anterior para ver como usar a biblioteca 'libPhoneNumber' no Android.
} else {
print("Número de telefone não fornecido")
}
}
}


Lembre-se de que, ao contrário do Android, no iOS você não pode acessar diretamente informações confidenciais, como número de telefone, IMEI e DDD. O exemplo acima permite que o usuário insira seu número de telefone manualmente. Para obter mais informações sobre o número de telefone, como DDD e país, você pode usar a biblioteca 'libPhoneNumber' mencionada na resposta anterior.




User
Qual melhor método para obter um número único do iOS


ChatGPT
No iOS, o melhor método para obter um número único para identificar um dispositivo é usar o identifierForVendor. O identifierForVendor é um identificador UUID exclusivo para cada aplicativo no dispositivo de um fornecedor específico. O UUID é gerado pelo sistema e persiste enquanto o aplicativo está instalado no dispositivo.

Aqui está um exemplo de como obter o identifierForVendor em Swift:

swift
Copy code


import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

if let identifierForVendor = UIDevice.current.identifierForVendor {
print("Identifier for Vendor: \(identifierForVendor.uuidString)")
} else {
print("Não foi possível obter o identifierForVendor")
}
}
}


O identifierForVendor é útil para identificar um dispositivo de maneira exclusiva em um aplicativo específico. No entanto, observe que o valor do identifierForVendor pode mudar se o usuário desinstalar todos os aplicativos do mesmo fornecedor e, em seguida, reinstalar um deles. Portanto, não é uma identificação globalmente única para o dispositivo em si.

Devido às restrições de privacidade no iOS, não é possível acessar diretamente informações como o IMEI ou o número de telefone do dispositivo. O identifierForVendor é a solução recomendada para identificar dispositivos de forma exclusiva e consistente com as diretrizes de privacidade da Apple.




User
Qual o código swift para saber a marca modelo do iPhone ou tablet


ChatGPT
No iOS, você pode obter informações sobre o modelo e o nome do dispositivo usando a classe UIDevice. Aqui está um exemplo de como obter a marca (Apple) e o modelo do iPhone ou iPad em Swift:

swift
Copy code


import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

let device = UIDevice.current
let deviceName = device.name
let deviceModel = device.model
let deviceSystemName = device.systemName
let deviceSystemVersion = device.systemVersion

print("Device Name: \(deviceName)")
print("Device Model: \(deviceModel)") // Retorna "iPhone" ou "iPad"
print("Device System Name: \(deviceSystemName)") // Retorna "iOS"
print("Device System Version: \(deviceSystemVersion)")

// A marca é sempre "Apple" para dispositivos iOS
let deviceBrand = "Apple"
print("Device Brand: \(deviceBrand)")
}
}


Este exemplo mostra como obter o nome, modelo, sistema e versão do dispositivo iOS. A marca é sempre "Apple" para dispositivos iOS.

Observe que a propriedade model retorna apenas "iPhone" ou "iPad". Se você deseja obter informações mais detalhadas sobre o modelo, como "iPhone 13" ou "iPad Pro (11-inch)", você precisará usar uma biblioteca de terceiros ou verificar o modelo do dispositivo com base no identificador de modelo do hardware (por exemplo, "iPhone14,5" para iPhone 13). No entanto, isso requer a manutenção de um mapeamento atualizado entre os identificadores de modelo e os nomes do dispositivo.




User
Como obter a marca modelo se é um celular, tablet ou computador por JavaScript ao abrir um site


ChatGPT
Você pode usar a propriedade navigator.userAgent em JavaScript para obter informações sobre o dispositivo, incluindo marca e modelo, quando um usuário visita um site. A navigator.userAgent é uma string que descreve o navegador e o sistema operacional do usuário. É importante observar que a navigator.userAgent pode ser facilmente falsificada e nem sempre é confiável.

Aqui está um exemplo de como obter informações básicas sobre o dispositivo usando JavaScript:

javascript
Copy code


function getDeviceInfo() {
const userAgent = navigator.userAgent;
const isMobile = /Mobi|Android/i.test(userAgent);
const isTablet = /Tablet|iPad/i.test(userAgent);
const isDesktop = !isMobile && !isTablet;

let deviceType = '';
if (isMobile) {
deviceType = 'Celular';
} else if (isTablet) {
deviceType = 'Tablet';
} else if (isDesktop) {
deviceType = 'Computador';
} else {
deviceType = 'Desconhecido';
}

return {
userAgent: userAgent,
deviceType: deviceType
};
}

const deviceInfo = getDeviceInfo();
console.log(`User Agent: ${deviceInfo.userAgent}`);
console.log(`Device Type: ${deviceInfo.deviceType}`);


Este exemplo define uma função getDeviceInfo() que analisa a navigator.userAgent para determinar se o dispositivo é um celular, tablet ou computador. A função retorna um objeto contendo o userAgent e o tipo de dispositivo.

Para obter informações mais específicas, como a marca e o modelo do dispositivo, você pode usar bibliotecas de terceiros como Mobile-Detect.js (https://github.com/hgoebl/mobile-detect.js) ou DeviceDetector (https://github.com/matomo-org/device-detector-js).

Tenha em mente que as informações obtidas por meio do User Agent podem ser imprecisas e facilmente manipuladas pelo usuário. Portanto, não confie nessas informações para a lógica crítica do seu aplicativo ou para fins de segurança.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/