3

我想在我的应用程序中使用public static final int DISABLE_NOTIFICATION_ALERTS声明的内部StatusBarManager,下面提到的是我的应用程序的代码摘录

Object object = getSystemService("statusbar");

    Class<?> statusBarManager;
    try {
        statusBarManager = Class.forName("android.app.StatusBarManager");
        Method[] method = statusBarManager.getMethods();
        Field fld[] = statusBarManager.getDeclaredFields();
        for (int i = 0; i < fld.length; i++) {
            String s = fld[i].toString();

        }
        Class name = object.getClass();

        Field field = statusBarManager
                .getDeclaredField("DISABLE_NOTIFICATION_ALERTS");

        android.util.Log.i("MainActivity", "value of::: " + field);

        Method disable = statusBarManager.getMethod("disable",
                new Class[] { int.class });

        disable.setAccessible(true);

        field.setAccessible(true);
        disable.invoke(object,new Integer(262144));

    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        Log.i("MAinActivity::", "No Such Class Found Exception");
        e.printStackTrace();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        Log.i("MAinActivity::", " Exception occur");
        e.printStackTrace();
    }

里面AndroidManifest.xml

<permission
    android:name="android.permission.STATUS_BAR_SERVICE"

    />

例外如下

01-01 11:45:59.504: W/System.err(676): java.lang.reflect.InvocationTargetException
01-01 11:45:59.514: W/System.err(676):  at java.lang.reflect.Method.invokeNative(Native Method)
01-01 11:45:59.514: W/System.err(676):  at java.lang.reflect.Method.invoke(Method.java:511)
01-01 11:45:59.514: W/System.err(676):  at com.example.stopmms.MainActivity.onCreate(MainActivity.java:90)
01-01 11:45:59.514: W/System.err(676):  at android.app.Activity.performCreate(Activity.java:5008)
01-01 11:45:59.514: W/System.err(676):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
01-01 11:45:59.514: W/System.err(676):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
01-01 11:45:59.514: W/System.err(676):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
01-01 11:45:59.514: W/System.err(676):  at android.app.ActivityThread.access$600(ActivityThread.java:130)
01-01 11:45:59.514: W/System.err(676):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
01-01 11:45:59.514: W/System.err(676):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-01 11:45:59.524: W/System.err(676):  at android.os.Looper.loop(Looper.java:137)
01-01 11:45:59.524: W/System.err(676):  at android.app.ActivityThread.main(ActivityThread.java:4745)
01-01 11:45:59.524: W/System.err(676):  at java.lang.reflect.Method.invokeNative(Native Method)
01-01 11:45:59.524: W/System.err(676):  at java.lang.reflect.Method.invoke(Method.java:511)
01-01 11:45:59.524: W/System.err(676):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-01 11:45:59.534: W/System.err(676):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-01 11:45:59.534: W/System.err(676):  at dalvik.system.NativeStart.main(Native Method)
01-01 11:45:59.534: W/System.err(676): Caused by: java.lang.SecurityException: StatusBarManagerService: Neither user 10045 nor current process has android.permission.STATUS_BAR.
01-01 11:45:59.544: W/System.err(676):  at android.os.Parcel.readException(Parcel.java:1425)
01-01 11:45:59.544: W/System.err(676):  at android.os.Parcel.readException(Parcel.java:1379)
01-01 11:45:59.544: W/System.err(676):  at com.android.internal.statusbar.IStatusBarService$Stub$Proxy.disable(IStatusBarService.java:324)
01-01 11:45:59.544: W/System.err(676):  at android.app.StatusBarManager.disable(StatusBarManager.java:91)
01-01 11:45:59.544: W/System.err(676):  ... 17 more

它给了我上面提到的异常

4

2 回答 2

6

您必须使用以下权限:

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

但是,您只能在系统应用程序中使用此权限。因此,如果您想在您的应用程序上获得此权限,您必须将其安装为系统应用程序,这只能在有根设备上完成。

于 2013-03-25T14:13:27.940 回答
0

除了Felipe和Mixaz的答案,还需要用系统签名在设备上签名

android:sharedUserId=”android.uid.system”
于 2015-06-16T20:20:43.287 回答