如何在三星Lollipop设备上通过编程扩展状态栏?

4
我使用这段代码来展开状态栏:
Object sbservice = getSystemService( "statusbar" );
Class<?> statusbarManager = Class.forName( "android.app.StatusBarManager" );
Method showsb;
if (Build.VERSION.SDK_INT >= 17) {
    showsb = statusbarManager.getMethod("expandNotificationsPanel");
} 
else { 
    showsb = statusbarManager.getMethod("expand");
} 
showsb.invoke( sbservice );

有权限的情况下:

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

除了三星Lollipop设备外,它运行良好,什么都没有发生。 有人知道如何在三星Lollipop设备上扩展状态栏吗? 谢谢!

你能基于无障碍服务回答这个问题吗?https://stackoverflow.com/q/49734263/4813904 - Siva
它在哪个设备上没有工作?我也使用了大致相同的代码:https://dev59.com/GlrUa4cB1Zd3GeqPhCZF#51616031 - android developer
1个回答

2

最终我找到了它,但我需要使用辅助功能服务:

public class MyAccessibilityService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
    Log.e("MyAccessibilityService", "get event");
    if (event.getEventType() == AccessibilityEvent.TYPE_TOUCH_INTERACTION_END) {
        switch (event.getAction()) {
            case 1:
                Log.e("MyAccessibilityService ", "home");
                performGlobalAction(AccessibilityService.GLOBAL_ACTION_HOME);
                break;
            case 2:
                Log.e("MyAccessibilityService ", "back");
                performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
                break;
            case 3:
                Log.e("MyAccessibilityService ", "power");
                performGlobalAction(AccessibilityService.GLOBAL_ACTION_POWER_DIALOG);
                break;
            case 4:
                Log.e("MyAccessibilityService ", "noti");
                performGlobalAction(AccessibilityService.GLOBAL_ACTION_NOTIFICATIONS);
                break;

        }


    }
}

火力全开:

AccessibilityEvent event1 = AccessibilityEvent.obtain(AccessibilityEvent.TYPE_TOUCH_INTERACTION_END);
        event1.setClassName(className);
        event1.getText().add("noti");
        event1.setAction(4);
        event1.setPackageName(packageName);
        event1.setEnabled(true);
        AccessibilityManager manager = (AccessibilityManager)context.getSystemService(Context.ACCESSIBILITY_SERVICE);
        AccessibilityRecordCompat recordCompat = AccessibilityEventCompat.asRecord(event1);
        recordCompat.setSource(v);
        if (Utility.isAccessibilityEnable(context)) {
            manager.sendAccessibilityEvent(event1);
        }

它能在最新的Android版本和所有其他设备上运行吗? - Siva
@SivaKReddyCShiva 我认为它仍然有效。无障碍服务并没有太大的改变。 - Hai nguyen thanh
谢谢回复。在展开状态栏后是否可以截屏? - Siva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接