StatusBarManager

Vsw*_*w10 2 android

我想在我的应用程序中使用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();
    }
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml

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

    />
Run Code Online (Sandbox Code Playgroud)

例外情况如下

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
Run Code Online (Sandbox Code Playgroud)

它给了我上面提到的例外

小智 5

您必须使用权限:

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

但是,您只能在系统应用中使用此权限.因此,如果您希望在应用程序上拥有此权限,则必须将其安装为系统应用程序,只能在root设备上完成.