相关疑难解决方法(0)

Android活动超过默认锁定屏幕

如何在锁定屏幕上显示ActivityDialog显示?

通过在Activity.onCreate()方法中设置各种窗口类型,我已经尝试在屏幕打开时显示我的锁定活动:

TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD

和其他人一起SYSTEM_ALERT_WINDOWINTERNAL_SYSTEM_WINDOW权限.

解锁设备后,我的活动可见.

更新:

我实际上已经设法显示我自己的Activity而不是默认锁定屏幕.除非您使用HOME按钮,否则它可以完美运行

android dialog lockscreen android-windowmanager android-activity

72
推荐指数
3
解决办法
8万
查看次数

锁定屏幕上的服务启动活动会打开屏幕,但不会显示活动本身

我正在尝试从已经获得锁定的服务开始活动,如下所示:

Intent i = new Intent(context, MyActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_USER_ACTION);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

活动清单声明如下:

<activity
        android:name=".MyActivity"
        android:configChanges="orientation|screenSize|keyboardHidden|keyboard|navigation"
        android:excludeFromRecents="true"
        android:launchMode="singleInstance"
        android:screenOrientation="nosensor"
        android:showOnLockScreen="true"
        android:taskAffinity=""
        android:theme="@style/MyTheme" />
Run Code Online (Sandbox Code Playgroud)

最后,on onCreate()或on onAttachedToWindow()(我试过两个),我添加以下标志:

final Window win = getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)

问题是我第一次startActivity()从我的服务中调用时,屏幕会亮起,但活动本身并没有显示出来.它显示锁定屏幕.每次后续调用startActivity()工作正常,但我找不到这种奇怪行为的原因.

我已经尝试过建议获取完整的唤醒锁而不是部分,根据以下SO答案更改清单中的标志和值:

请注意,我的主题不是对话框,而是全屏活动.

还有其他想法吗?

android android-activity

12
推荐指数
1
解决办法
1万
查看次数

如何创建在锁定屏幕顶部可见的活动

屏幕锁定时,我收到了传入的C2DM通知.我想唤醒屏幕并使用活动在锁定屏幕顶部显示通知消息.我正在从我的C2DM BroadcastReceiver启动通知活动,如下所示:

Intent new_intent= new Intent().setClass( context, EIAlertDialog.class );           
new_intent.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP );      
new_intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );      
context.startActivity( new_intent );
Run Code Online (Sandbox Code Playgroud)

在通知Activity的onCreate方法中,我按如下方式唤醒屏幕:

PowerManager powerManager= (PowerManager)getSystemService( Context.POWER_SERVICE );
if (!powerManager.isScreenOn()) {
    mWakeLock= powerManager.newWakeLock(
                   PowerManager.FULL_WAKE_LOCK |
                   PowerManager.ACQUIRE_CAUSES_WAKEUP, 
                   "My Tag" )
    mWakeLock.acquire();
}
Run Code Online (Sandbox Code Playgroud)

屏幕被唤醒,但在我解锁屏幕之前,通知活动不可见.

我意识到我可以使用下面的代码来避开锁定屏幕,但这是不可取的.我希望用户解锁手机,只要他/她有兴趣阅读/回复通知.

getWindow().addFlags(
    WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON 
);
Run Code Online (Sandbox Code Playgroud)

android locking wakeup

11
推荐指数
1
解决办法
7510
查看次数

如何显示全屏TYPE_SYSTEM_ALERT窗口?

我目前很难在全屏模式下显示TYPE_SYSTEM_ALERT窗口.我想这样做是为了在状态栏上有一个从服务创建的叠加视图,但不隐藏它.

但是,将FLAG_FULLSCREEN标志放在我正在创建的窗口的布局参数中似乎不起作用.我找到了STATUS_BAR和EXPAND_STATUS_BAR权限,但我找不到如何使用它们.

这是LayoutParams:

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
            WindowManager.LayoutParams.FLAG_FULLSCREEN,
            PixelFormat.TRANSLUCENT);

    params.gravity = Gravity.RIGHT | Gravity.TOP;

    mWindowManager.addView(mOverlayView, params);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

谢谢

android android-layout

11
推荐指数
1
解决办法
1万
查看次数

如何在不解锁屏幕的情况下启动可以单击的对话框(如闹钟dimiss/snooze)

我不想永久地绕过键盘锁,只是为了这一刻.例如当发出警报时(例如唤醒警报)我可以在解锁屏幕时解除/暂停它.我想要实现同样的行为.我想开始一个对话框应该在锁定的屏幕上.我可以点击对话框上的按钮而不解锁.这可能吗?如果是的话怎么样?

我不想要以下内容:

private void unlockScreen(Context context){
        Log.d("dialog", "unlocking screen now");
        PowerManager powermanager = ((PowerManager)context.getSystemService(Context.POWER_SERVICE));
        WakeLock wakeLock = powermanager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "tag");
        wakeLock.acquire();
        Window wind = DialogActivity.this.getWindow();
        wind.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
        wind.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        wind.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);


    }
Run Code Online (Sandbox Code Playgroud)

android password-protection android-alarms

9
推荐指数
1
解决办法
1375
查看次数

在Android 2.3中通过锁屏显示触摸事件的对话框

我想构建一个在锁屏上可见的对话框,可以接收触摸事件.我构建了一个窗口,WindowManager但只有TYPE_SYSTEM_OVERLAY标志显示在GB(Android 2.3.7)的锁屏上.

有没有办法创建一个在锁屏上可见的系统覆盖,并可以在Android 2.3.7中接收触摸事件?

有一个错误,FLAG_WATCH_OUTSIDE_TOUCH但我不确定这对我有什么影响.有任何想法吗?

android overlay android-windowmanager

7
推荐指数
1
解决办法
5130
查看次数

锁定屏幕上的Android对话框

我正在设计一个关于闹钟的应用程序.

即使手机被锁定,如何显示对话框?

我不希望手机解锁.我只是想让它在手机上显示一些文字.用户需要自己解锁手机以获取更多信息.

没有必要使用对话框.我想要的只是一些要显示的文字.

谢谢!

android

4
推荐指数
1
解决办法
6203
查看次数

Android:以编程方式删除或禁用Samsung Galaxy S2设备上的锁定屏幕

问题我的Android自动化测试不可靠,因为测试的活动有时会运行并且有时会暂停.

原因如果我的Android设备(三星Galaxy S2)启用了锁屏,则所有活动都会立即进入暂停模式.

如何在我的测试运行时以编程方式禁用锁定屏幕?

这是我尝试过的,根本没有产生任何结果(即,锁定屏幕仍处于活动状态并暂停我的活动).

  • 添加android.permission.DISABLE_KEYGUARD权限并KeyguardLock.disableKeyguard()按照android doc中的说明使用.

  • 设置窗口标志:FLAG_SHOW_WHEN_LOCKED,FLAG_TURN_SCREEN_ON,FLAG_DISMISS_KEYGUARD.

  • 使用WakeLock.acquire()PowerManager.FULL_WAKE_LOCK,PowerManager.ACQUIRE_CAUSES_WAKEUP,PowerManager.ON_AFTER_RELEASEPowerManager.SCREEN_BRIGHT_WAKE_LOCK参数.

  • adb shell input keyevent 82

android android-activity

3
推荐指数
3
解决办法
2万
查看次数