为什么Android在反映到activityManagerNative setAlwaysFinish()时会抛出invocationtargetexception

时间:2013-09-27 13:07:12

标签: java android reflection

我正在尝试执行反射以关闭设备系统菜单中的开发者选项“不保持活动”。该设置也称为setAlwasyFinish()。我知道有些设备可以使用

Settings.System.putInt(getApplicationContext().getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0);  

(我在4.0设备上成功使用了它。)

但我正在使用2.3设备,此设备无根。我的印象是反射可以修改设置。 当我执行下面的代码时,我收到异常

  

java.lang.reflect.invocationtargetexception发生异常。

有人可以向我解释我的代码错误,我收到此错误。谢谢

Class<?> activityManagerNative = Class.forName("android.app.ActivityManagerNative");
Method methodDefault = activityManagerNative.getMethod("getDefault"); 
final Method  methodSetAlwaysFinish = activityManagerNative.getMethod("setAlwaysFinish", new Class[]{boolean.class});
Type[] params = methodSetAlwaysFinish.getGenericParameterTypes();
final Object objectInstance = methodDefault.invoke(null);
methodSetAlwaysFinish.invoke(objectInstance,  true);

这些是我正在使用的权限。

android:name="android.permission.WRITE_SETTINGS
android:name="android.permission.CHANGE_CONFIGURATION"

1 个答案:

答案 0 :(得分:1)

在调试过程中需要进行一些严肃的挖掘,但活动需要获得许可。

<uses-permission android:name="android.permission.SET_ALWAYS_FINISH"/>