我正在尝试执行以下命令:
Process process = Runtime.getRuntime().exec("adb shell dpm set-device-owner com.example.package/.DeviceAdmin", null,null);
并得到以下异常
W/System.err:java.io.IOException: Cannot run program "adb": error=13, Permission denied
W/System.err: at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
W/System.err: at java.lang.Runtime.exec(Runtime.java:692)
W/System.err: at java.lang.Runtime.exec(Runtime.java:525)
我试图通过以编程方式执行“adb shell dpm set-device-owner com.example.package/.DeviceAdmin”来将我的设备设置为所有者。
注意:我试过在没有 adb shell 前缀的情况下运行命令,但是它返回 null 并且没有应用任何更改。
以下代码执行我的命令。
try {
StringBuffer output = new StringBuffer();
Process process = Runtime.getRuntime().exec("dpm set-device-owner com.example.package/.DeviceAdmin", null,null);
process.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = "";
while ((line = reader.readLine()) != null) {
output.append(line + "n");
Log.d("OUTPUT = ", output.toString());
}
} catch (Exception e) {
Log.e("LOGINACTIVITY ", "device owner not set");
Log.e("LOGINACTIVITY ", e.toString());
e.printStackTrace();
}
下面是我的 DeviceAdminReceiver 子类
public class DeviceAdmin extends DeviceAdminReceiver {
public ComponentName getComponentName(Context context){
return new ComponentName(context.getApplicationContext(), DeviceAdmin.class);
}
void showToast(Context context, String msg) {
String status = msg;
Toast.makeText(context, status, Toast.LENGTH_SHORT).show();
}
@Override
public void onEnabled(Context context, Intent intent) {
showToast(context, "Enabled");
}
检查设置和设备没有帐户(这是一个没有任何谷歌播放服务的安卓设备,也没有root。)。该应用程序的 minSdkVersion 为 21/targetSdkVersion 为 27。
最终,我希望将设备设置为所有者(没有 NFC),其唯一目的是在不征得用户许可的情况下固定屏幕。(这是一个 POS 应用程序)。如何执行命令以便我可以毫无例外地将设备设置为所有者?
潇湘沐
千万里不及你
相关分类