android怎么解决io异常,尝试执行进程时出现Android IO异常

我有以下代码,用于从其PID中获取应用程序名称。

shell命令是(只是为了显示它从shell提示符工作,我修剪了很多线,它们都长得差不多)尝试执行进程时出现Android IO异常

C:\android-sdk-windows\platform-tools>adb shell ps

USER PID PPID VSIZE RSS WCHAN PC NAME

root 1 0 312 220 c009b74c 0000ca4c S /init

root 2 0 0 0 c004e72c 00000000 S kthreadd

root 3 2 0 0 c003fdc8 00000000 S ksoftirqd/0

root 4 2 0 0 c004b2c4 00000000 S events/0

root 27 1 740 316 c0158eb0 afd0d8ac S /system/bin/sh

system 28 1 812 292 c01a94a4 afd0db4c S /system/bin/servicemanager

root 29 1 3736 568 ffffffff afd0e1bc S /system/bin/vold

system 68 33 191096 38680 ffffffff afd0db4c S system_server

radio 131 33 147680 22868 ffffffff afd0eb08 S com.android.phone

app_25 134 33 148784 25740 ffffffff afd0eb08 S com.android.launcher

app_0 160 33 135560 20956 ffffffff afd0eb08 S android.process.acore

root 316 40 740 332 c003da38 afd0e7bc S /system/bin/sh

root 317 316 888 336 00000000 afd0d8ac R ps

我的Java代码:

private static Pattern pidPattern = Pattern.compile("(\\d+).+?\\s+[DNRSTZ]\\s+(.+)$");

private final Map pidNames = new HashMap();

private void getAppNames() {

// Bad command: String commandLine = "adb shell ps";

String line;

try {

Process process = Runtime.getRuntime().exec("ps");

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

Matcher matcher;

pidNames.clear();

while((line = bufferedReader.readLine()) != null) {

matcher = pidPattern.matcher(line);

if(matcher.find()) {

int pid = Integer.valueOf(matcher.group(1));

String name = matcher.group(2);

pidNames.put(pid, name);

Log.i(TAG, "Pid=" + pid + " Name=" + name);

}

}

bufferedReader.close();

process.destroy();

}

catch (IOException e) {

Log.e(TAG, "getAppNames failed", e);

}

}

我得到以下消息:

05-14 17:09:00.220: E/BackTask(698): getAppNames failed

05-14 17:09:00.220: E/BackTask(698): java.io.IOException: Error running exec(). Command: [adb shell ps, android.com] Working Directory: null Environment: [ANDROID_SOCKET_zygote=10, ANDROID_BOOTLOGO=1, EXTERNAL_STORAGE=/mnt/sdcard, ANDROID_ASSETS=/system/app, ASEC_MOUNTPOINT=/mnt/asec, PATH=/sbin:/system/sbin:/system/bin:/system/xbin, ANDROID_DATA=/data, BOOTCLASSPATH=/system/framework/core.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar, ANDROID_PROPERTY_WORKSPACE=9,32768, ANDROID_ROOT=/system, LD_LIBRARY_PATH=/system/lib]

05-14 17:09:00.220: E/BackTask(698): at java.lang.ProcessManager.exec(ProcessManager.java:226)

05-14 17:09:00.220: E/BackTask(698): at java.lang.ProcessBuilder.start(ProcessBuilder.java:201)

05-14 17:09:00.220: E/BackTask(698): at com.delta.app.BackTask.getAppNames(BackTask.java:180)

05-14 17:09:00.220: E/BackTask(698): at com.delta.app.BackTask.doInBackground(BackTask.java:65)

05-14 17:09:00.220: E/BackTask(698): at com.delta.app.BackTask.doInBackground(BackTask.java:1)

05-14 17:09:00.220: E/BackTask(698): at android.os.AsyncTask$2.call(AsyncTask.java:185)

05-14 17:09:00.220: E/BackTask(698): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)

05-14 17:09:00.220: E/BackTask(698): at java.util.concurrent.FutureTask.run(FutureTask.java:137)

05-14 17:09:00.220: E/BackTask(698): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)

05-14 17:09:00.220: E/BackTask(698): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)

05-14 17:09:00.220: E/BackTask(698): at java.lang.Thread.run(Thread.java:1096)

05-14 17:09:00.220: E/BackTask(698): Caused by: java.io.IOException: Permission denied

05-14 17:09:00.220: E/BackTask(698): at java.lang.ProcessManager.exec(Native Method)

05-14 17:09:00.220: E/BackTask(698): at java.lang.ProcessManager.exec(ProcessManager.java:224)

05-14 17:09:00.220: E/BackTask(698): ... 10 more

问题是:怎么了?没有权限?该过程调用自己?

编辑: 试过行:

Process process = Runtime.getRuntime().exec(commandLine);

与同IOException异常结果

2012-05-14

ilomambo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值