나는 그것에 대해 이미 질문이 있다는 것을 알고 있지만, 모든 답을 성공없이 시도했다.안드로이드 애플 리케이션을위한 루트 액세스 요청
("루트"라는 제목) 간단한 CheckBoxPreference있다 :
<CheckBoxPreference
android:key="root"
android:title="@string/root"
android:summary="@string/root_summary"
android:defaultValue="false" />
지금 내가 게인 루트 액세스에 OnPreferenceChangeListener를 설정할 필요가. 체크 박스에 체크해야 그렇다면, 그렇지 않으면 안 :
public class Settings extends PreferenceActivity implements OnPreferenceChangeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
findPreference("root").setOnPreferenceChangeListener(this);
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String key = preference.getKey();
if ("root".equals(key) && !((CheckBoxPreference) preference).isChecked()) {
try {
Process p = Runtime.getRuntime().exec("su");
p.waitFor();
Log.d("Settings", Integer.toString(p.exitValue()));
if (p.exitValue() == 255) {
Log.d("Settings", "###NO ROOT###");
return false;
}
} catch (Exception e) {
Log.d("Settings", "###NO ROOT###");
Log.d("Settings", e.getMessage());
return false;
}
Log.d("Settings", "!!!ROOT!!!");
}
return true;
}
}
수퍼 유저 루트 액세스를 제대로하라는 메시지가 표시됩니다. exitValue가 1 (???)이고 전체 앱을 정지시킬 수 있으므로 (p.waitFor에서 추측합니다) 부인은 true를 반환합니다.
현재 su 바이너리 3.1.1 (최신 버전)으로 수퍼 유저 3.1.3을 실행하고 있습니다. Activity pause timeout for ActivityRecord{42c0ebb8 com.example/.gui.Settings}
이
어떻게 ES 파일 관리자가이 작업을 수행합니까? 같은 절차입니다 : 설정 -> 루트 - 설정 -> 루트 탐색기 (CheckBoxPreference)입니다. 나는 똑같이하고 싶다. 어떤 명령을 수행합니까? 수행해야합니까? – dtrunk
루트로 개별 파일 작업을 실행한다고 가정합니다 (예 :'mv','ls' 등의 UNIX 명령) –
onPreferenceChange에서 직접 ?! 나는 그렇게 생각하지 않는다 ... – dtrunk