Я нашел несколько интересных методов в классе telephonyManager, таких как включение / выключение мобильных данных, но при попытке их использования это, очевидно, приводит к исключению безопасности («Нет привилегии оператора»).Я прогуглил это, но не нашел никакого полезного решения.Потому что это привилегия оператора связи, я думал, что возможно получить его разрешение по telephonyManager.getIccAuthentication(int appType, int authType, String data)
, но у меня проблемы с входными параметрами, потому что я не могу понять, что я должен передать, чтобы заставить его работать.
От документации к первому параметру будет передаваться TelephonyManager.APPTYPE_SIM
или / и TelephonyManager.APPTYPE_USIM
в зависимости от того, имеет ли он большое значение при использовании setDataEnabled(boolean)
.Если бы я передал TelephonyManager.APPTYPE_SIM
в качестве первого аргумента, я думаю, что я должен передать TelephonyManager.AUTHTYPE_EAP_SIM
в качестве второго аргумента (поправьте меня, если я ошибаюсь) и наоборот, когда TelephonyManager.APPTYPE_USIM
в качестве первого, а TelephonyManager.AUTHTYPE_EAP_AKA
в качестве второго.
И вот третий аргумент.Там должно быть закодировано Base64 в строку.В TelephonyProvider я нашел следующую строку кода: String base64Challenge = Base64.encodeToString(byteParam, Base64.NO_WRAP);
, где byteParam - это входной байт другого метода, которому предшествуют тысячи других методов.Если я передаю «» в качестве третьего параметра в метод getIccAuthentication, я снова получаю securityException (это, очевидно, неправильный параметр), но это приводит к отсутствию getIccSimChallengeResponse
.Я боюсь, что это может быть бесконечный цикл методов, но, может быть, кто-то имеет какие-либо идеи или помочь мне прорвать это?
Мой пример кода:
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.buttonPanel);
button.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onClick(View view) {
try {
Process p = Runtime.getRuntime().exec("su");
tel();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
@RequiresApi(api = Build.VERSION_CODES.O)
private void tel(){
// String base64Challenge = Base64.encodeToString(,
Base64.NO_WRAP);
TelephonyManager telephonyManager = (TelephonyManager)
getSystemService(Context.TELEPHONY_SERVICE);
boolean isCarrier = telephonyManager.hasCarrierPrivileges();
String authentication =
telephonyManager.getIccAuthentication(TelephonyManager.APPTYPE_SIM,
TelephonyManager.AUTHTYPE_EAP_SIM, "");
Log.v(TAG, authentication);
if (isCarrier) {
Log.v(TAG, "privs granted");
telephonyManager.setDataEnabled(false);
} else {
Log.v(TAG, "no privilegies");
}
}
}