我需要在用户点击解锁屏幕时运行我的应用。我在BroadcastReceiver中使用了ACTION_USER_PRESENT Intent来检查。我使用了以下代码。我需要在解锁屏幕前显示我的应用程序。但是在解锁屏幕后我的应用程序可见。任何帮助将不胜感激。
我的BroadcastReceiver
package com.progressindicator;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.view.WindowManager;
public class Receive extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if (intent.getAction() != null) {
if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)) {
Intent s = new Intent(context, ProgressIndicator.class);
s.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
// s.setFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
s.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
s.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(s);
}
}
}
}
清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.progressindicator"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.progressindicator.ProgressIndicator"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".Receive" >
<intent-filter
android:enabled="true"
android:exported="false" >
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
</application>
</manifest>
我的活动:
package com.progressindicator;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class ProgressIndicator extends Activity {
ImageView loading;
AnimationDrawable loadAnimation;
private Window wind;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_progress_indicator);
// requestWindowFeature(Window.FEATURE_NO_TITLE);
// requestWindowFeature(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
// wind = this.getWindow();
// wind.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
// wind.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
// wind.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
);
LinearLayout main = new LinearLayout(this);
main.setOrientation(LinearLayout.VERTICAL);
setContentView(main);
loading = new ImageView(this);
loading.setImageResource(R.drawable.loading);
loadAnimation = (AnimationDrawable)loading.getDrawable();
main.addView(loading);
}
@Override
public void onWindowFocusChanged(boolean hasFocus){
loadAnimation.start();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.progress_indicator, menu);
return true;
}
}
答案 0 :(得分:1)
尝试为要启动的活动添加WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED,只要您的活动位于所有其他窗口之上,这将暂时禁用keyguard / keylock。
答案 1 :(得分:0)
前段时间我用这个项目
// set flags for staying on and lockscreen
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
此外,我会检查你的Intent参数,以确保你创建一个新的Activity和onCreate被调用。
如果要禁用锁定屏幕,则需要成为设备管理员。
编辑:
ACTION_USER_PRESENT是在用户解锁屏幕后发送的,这就是为什么它无法在锁屏顶部显示屏幕。
您应该更改为ACTION_SCREEN_ON。
编辑2:
在清单上我有android:launchMode="singleTask"
,在意图中我用以下方式调用活动:
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
答案 2 :(得分:0)
您需要将WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
添加到您的帐户中
窗口标志,如Activity.getWindow().addFlags(...)
中所示。
我建议另外使用此FLAG_WATCH_OUTSIDE_TOUCH
并打电话
它在你的onCreate生命周期方法中。
到“安全漏洞”主题。作为应用程序开发人员,这是正确的 能够在安全锁屏出现之前弹出,但很简单 主页按钮点击将暂停您的活动(甚至是系统警报)并显示 安全卫士。
我知道有一些黑客的方法,但它们不起作用 对于每台设备,在HTC和Samsumg上都有点破解,没有app应该 能够锁定用户。
史蒂夫