android 원 키 변경
9639 단어 android
telephonyManager.getImei(){ //获取默认卡的imei ,就是当前正在联网的
if(true){
从sd卡或者数据库读取动态imei
[size=3]}[/size]
return getImei(getSlotIndex());
}[/size]
public String getImei(int slotIndex) { //如果是多卡,就获取指定的imei。不知道模拟器或者双开注意要支持
ITelephony telephony = getITelephony();
if (telephony == null) return null;
try {
return telephony.getImeiForSlot(slotIndex, getOpPackageName());[/size]
} catch (RemoteException ex) {
return null;
} catch (NullPointerException ex) {
return null;
}
}
나머지 핸드폰 번호, simnum, iccid 는 모두 이 방법 입 니 다. 저 는 아래 코드 검증 을 통 해 수 정 된 매개 변 수 는 완전히 작용 합 니 다.
private void imei() {
try {
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
return;
}
String ANDROID_ID = Settings.System.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID);
Log.e(TAG,"def ANDROID_ID ->" + ANDROID_ID);
String imei0 = telephonyManager.getDeviceId();
Log.e(TAG,"def myimei ->" + imei0);
String imei1 = telephonyManager.getDeviceId(1);
Log.e(TAG,"myimei1 ->" + imei1);
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1){
String imei2 = telephonyManager.getImei(0);
Log.e(TAG,"26+ imei0 ->" + imei2);}
String imsi = telephonyManager.getSubscriberId();
Log.e(TAG, "imsi ->" + imsi);
String phoneNumber = telephonyManager.getLine1Number();
Log.e(TAG, "SIM卡中存储本机号码 phoneNumber ->" + phoneNumber);
String voiceMail = telephonyManager.getVoiceMailNumber();
Log.e(TAG, "语音邮件号码 voiceMail ->" + voiceMail);
String simSerial = telephonyManager.getSimSerialNumber();
Log.e(TAG, "SIM卡序列号 simSerial ->" + simSerial);
String countryIso = telephonyManager.getNetworkCountryIso();
Log.e(TAG, "SIM卡提供商的国家代码 countryIso ->" + countryIso);
String carrier = telephonyManager.getNetworkOperatorName();
Log.e(TAG, "当前移动网络运营商 mynetname ->" + carrier);
String netid = telephonyManager.getNetworkOperator();
Log.e(TAG, "当前移动网络运营商 netid ->" + netid);
int count = telephonyManager.getPhoneCount();
Log.e(TAG, "移动卡数量 count ->" + count);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
String Meid = telephonyManager.getMeid();
Log.e(TAG, "移动卡数量 Meid ->" + Meid);
}
if (Build.VERSION.SDK_INT > 28) {
String nai = telephonyManager.getNai();
Log.e(TAG, "移动卡数量 Nai ->" + nai);
}
String simOperator = telephonyManager.getSimOperator();
Log.e(TAG, "SIM的移动运营商的名称 mysmo ->" + simOperator);
int phoneType = telephonyManager.getPhoneType();
Log.e(TAG, "移动终端的类型 phoneType ->" + phoneType);
int radioType = telephonyManager.getNetworkType();
Log.e(TAG, "当前使用的网络制式 radioType ->" + radioType);
String softVersion = telephonyManager.getDeviceSoftwareVersion();
Log.e(TAG, "软件版本 softVersion ->" + softVersion);
boolean Roam = telephonyManager.isNetworkRoaming();
Log.e(TAG, "漫游 Roam ->" + Roam);
} catch (Exception e) {
e.printStackTrace();
}
}
Android 수정 Androidid 방법: Android 획득 방법 은 String ANDROIDID = Settings.System.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID); 이 매개 변 수 는 read - only 입 니 다.Settings. System. putString (this. getContentResolver (), "사용자 정의 id") 를 사용 하면;잘못 을 보고 할 수 있 으 니, 단지
public static boolean putStringForUser(@NonNull ContentResolver resolver,
@NonNull String name, [url=home.php?mod=space&uid=1043391]@nullable[/url] String value, @Nullable String tag,
boolean makeDefault, @UserIdInt int userHandle) {
if (LOCAL_LOGV) {
Log.v(TAG, "Global.putString(name=" + name + ", value=" + value
+ " for " + userHandle);
}
// Global and Secure have the same access policy so we can forward writes
if (MOVED_TO_SECURE.contains(name)) {
Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Global"
+ " to android.provider.Settings.Secure, value is unchanged.");
return Secure.putStringForUser(resolver, name, value, tag,
makeDefault, userHandle);
}
return sNameValueCache.putStringForUser(resolver, name, value, tag,
makeDefault, userHandle);
}
if (MOVED TO SECURE. contains (name)) {} 내용 주석 만 달 면 됩 니 다.Android 동적 수정 mac 가 귀 찮 습 니 다. Android 가 mac 를 가 져 오 는 방식 은 다음 과 같은 몇 가지 첫 번 째 셸 명령 이 있 습 니 다. ifconfig 두 번 째 는?
private static String getMacFromHardware() {
try {
List all = Collections.list(NetworkInterface.getNetworkInterfaces());
Log.d("Utils", "all:" + all.size());
for (NetworkInterface nif : all) {
if (!nif.getName().equalsIgnoreCase("wlan0")) {
continue;
}
byte[] macBytes = nif.getHardwareAddress();
if (macBytes == null) {
return null;
}
Log.d("Utils", "macBytes:" + macBytes.length + "," + nif.getName());
StringBuilder res1 = new StringBuilder();
for (byte b : macBytes) {
res1.append(String.format("%02X:", b));
}
if (res1.length() > 0) {
res1.deleteCharAt(res1.length() - 1);
}
return res1.toString();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
세 번 째 cat/sys/class/net/wlan 0/address 는 첫 번 째 와 세 번 째 에 대해 비교적 번거롭다.getInetAddresses 를 수정 하여 동적 인 mac 로 돌아 가면 ifconfig 와 cat/sys/class/net/wlan 0/address 를 돌아 갈 수 없습니다. 제 쪽 은 mac 주 소 를 직접 수정 하고 ifconfig wlan 0 hw ether $Mac 이름 을 실행 합 니 다. 수정 후 세 가지 방법 이 모두 작용 합 니 다. 네 번 째 반사 방식 으로 mac 를 가 져 올 수 있 는 지 모 르 겠 습 니 다.하지만 이 방법 은 루트 권한 이 있어 야 합 니 다.핸드폰 userdebug 나 eng 이면 마음대로 수정 할 수 있 습 니 다.코드 에서 동적 으로 수정 하려 면 부팅 스 크 립 트 를 수정 해 야 합 니 다.구체 적 인 세부 사항 은 열거 하지 않 았 다.SN 수정
public static String getSerial() {
boolean flag =SystemProperties.getBoolean("persist.sys.keep.mprop",false);
if(flag){
返回我的sn
}
}else{
IDeviceIdentifiersPolicyService service = IDeviceIdentifiersPolicyService.Stub
.asInterface(ServiceManager.getService(Context.DEVICE_IDENTIFIERS_SERVICE));
try {
return service.getSerial();
} catch (RemoteException e) {
e.rethrowFromSystemServer();
}
}
return UNKNOWN;
}
이상 의 수정 은 모두 제 테스트 app 을 통 해 검 증 된 적 이 있 습 니 다.동적 수정 을 지원 할 수 있 습 니 다. 동적 수정 화면 해상도 와 밀도, sensor 유형 및 이름과 apk 목록 이 모두 완료 되 었 습 니 다.다만 개인 적 으로 는 소 용이 없다 고 생각 합 니 다.관심 있 는 것 은 저 에 게 연락 하여 함께 연구 하 셔 도 됩 니 다. 다른 수정 사항 이 있 으 면 메 시 지 를 남 겨 주세요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.