我正在尝试编写一个应用程序,它会在经过一段时间后返回到前台时执行某些特定操作.有没有办法检测应用程序何时发送到后台或带到前台?
我只是想知道是否可以在应用程序清单中注册检测屏幕ON/OFF的广播接收器.我不喜欢可编程方法的原因是它需要运行应用程序以便检测这样的事情,同时:"当Intent是Intent时,在清单中注册的广播接收器的应用程序不必运行广播接收器执行"(来源:专业Android 2应用程序开发书)
我的应用程序实际上是一个锁屏应用程序,通过使用可编程方式需要一直运行:S
有办法解决吗?
我在清单中尝试以下内容:
<receiver android:name=".MyBroadCastReciever">
<intent-filter>
<action android:name="android.intent.action.SCREEN_OFF"/>
<action android:name="android.intent.action.SCREEN_ON"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
和简单的MyBroadCastReciever类:
public class MyBroadCastReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
Log.i("Check","Screen went OFF");
Toast.makeText(context, "screen OFF",Toast.LENGTH_LONG).show();
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
Log.i("Check","Screen went ON");
Toast.makeText(context, "screen ON",Toast.LENGTH_LONG).show();
}
}
}
Run Code Online (Sandbox Code Playgroud) 我一直在阅读Stackoverflow上的一些帖子,我没有找到一个好的解决方案,我想知道是否有可能检测到用户长时间按下电源按钮时试图关闭设备,我想知道你是否可以检测到该事件,并且让或者不显示出现的对话框(重启,关机等...)
我试过这个:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
Toast.makeText(MainActivity.this, event.getKeyCode(), Toast.LENGTH_SHORT).show();
return true;
}
Run Code Online (Sandbox Code Playgroud)
但它没有出现,它也应该作为一项服务工作,我的意思是应用程序可以打开或不打开显示吐司.
这就是我的方式 onCloseSystemDialog
//home or recent button
public void onCloseSystemDialogs(String reason) {
if ("globalactions".equals(reason)) {
Toast.makeText(PowerButtonService.this, "yaps", Toast.LENGTH_SHORT).show();
Intent i= new Intent(getBaseContext(), Demo.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(i);
//} else if ("homekey".equals(reason)) {
//home key pressed
//} else if ("recentapss".equals(reason)) {
// recent apps button clicked
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但只有当设备解锁时,设备被锁定时才会显示任何内容.
此外,我试图弄清楚如何在用户单击powerbutton时删除对话框我试过这个:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
Run Code Online (Sandbox Code Playgroud)
但如果我想再次展示它,我该怎么办呢?
i=0;
public boolean onKeyDown(int keyCode, KeyEvent event) {
System.out.println("In Key Down Method." + event.getKeyCode());
if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) {
i++;
System.out.println("Power button pressed.");
if (i == 2) {
System.out.println("Power button pressed continuoulsy 3 times.");
Toast.makeText(MainActivity.this, "Power button pressed " + i + " times.", Toast.LENGTH_SHORT).show();
} else {
System.out.println("Power button pressed continuoulsy " + i + " times.");
Toast.makeText(MainActivity.this, "Power button pressed " + i + " times.", Toast.LENGTH_SHORT).show();
}
}
return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用上面的代码访问电源按钮事件.它适用于Volume_Up和Volume_Down键,但不适用于电源/锁定按钮.为什么会发生?建议一些示例或代码.
如何检测按下的电源按钮或锁定屏幕按钮?当我的游戏以这种方式暂停时,它会导致游戏崩溃,因为我需要在线程发生时暂停它.
我正在开发一个应用程序,其中要求不允许用户使用电源按钮锁定屏幕或关闭Android设备,因此我必须禁用电源按钮并覆盖电源按钮功能,我已经搜索过互联网上也有很多,但找不到任何东西。我已经使用了这两段代码,但它仍然对我不起作用。
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) {
Log.i("", "Dispath event power");
Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
sendBroadcast(closeDialog);
return true;
}
return super.dispatchKeyEvent(event);
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_POWER) {
// Back
moveTaskToBack(true);
return true;
}
else {
// Return
Run Code Online (Sandbox Code Playgroud)
请帮助我提前致谢。
我正在制作一个Android应用程序,需要检测设备电源按钮事件按两次/三次并在后台发送短信.监听器应该在后台运行(即使我的应用程序未打开,它应该检测到按键事件并相应地采取行动).
以下是我尝试过的代码无效...
我的代码:
public class MyBroadCastReciever extends BroadcastReceiver {
int Count=0;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
Count++;
if(Count==2){
//Send SMS code..
}
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
//This is for screen ON option.
}
}
Run Code Online (Sandbox Code Playgroud)
清单文件:
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name=".MyBroadCastReciever" >
<intent-filter>
<action android:name="android.intent.action.SCREEN_OFF" />
<action android:name="android.intent.action.SCREEN_ON" />
</intent-filter>
</receiver>
</application>
Run Code Online (Sandbox Code Playgroud) 我正在尝试按下电源按钮时听.最后,我希望在按两次电源按钮时运行一些代码,以检查屏幕是锁定还是解锁.我目前有这个:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);//prevent phone from being locked
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_POWER:
{
Toast.makeText(getBaseContext(), "Power button pressed", Toast.LENGTH_LONG).show();
return true;
}
case KeyEvent.KEYCODE_MENU:
Toast.makeText(getBaseContext(), "Menu Button Pressed", Toast.LENGTH_LONG).show();
return true;
}
return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)
该代码可以很好地为菜单keyevent干杯,但不会为电源键事件做任何事情.有任何想法吗?
我正在尝试开发一个应用程序,可以在单击电源按钮后执行某些操作.
我有一个代码捕获onClick of Power按钮,但它似乎不起作用.屏幕会锁定.
现在我试图捕捉电源按钮的onLongPress,防止出现"关闭电源"选项.有关如何做到这一点的任何建议?
提前致谢.
我正在开发一个应用程序,我需要在按下电源按钮时执行操作,但不幸的是,当按下电源按钮时,我无法处理电源按钮的动作.我尝试使用onKeyDown()和dispatchKeyEvent()方法,但似乎没有任何工作.谁能建议我解决这个问题的任何其他方法或解决方案.
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) {
// The action I want to perform when power button is pressed.
return true;
}
return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)
和
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) {
Intent i = new Intent(this, NewActivity.class);
startActivity(i);
return true;
}
return super.dispatchKeyEvent(event);
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,我可以在 3-5 秒内听到连续点击POWER_BUTTON 3 次的声音。
我已经在 StackOverflow 上搜索了所有答案,但没有一个对我有用。
Lars D的这个答案应该适用于该活动,但尽管已被接受,但也不起作用。
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) {
Intent i = new Intent(this, ActivitySetupMenu.class);
startActivity(i);
return true;
}
return super.dispatchKeyEvent(event);
}
Run Code Online (Sandbox Code Playgroud)
有一个应用程序打算执行此操作,我安装了它,但它仍然不起作用,也许他们使用的 API 已贬值甚至已被删除。
这些解决方案不起作用的原因:
也许我们可以找到一种方法来在活动上执行此操作,但我想在应用程序被终止/在后台/屏幕锁定时/屏幕关闭时使用服务/广播接收器监听操作。
好吧,这个问题在 StackOverflow 上肯定重复了很多次,但没有给出完整或有效的答案。
android ×11
java ×2
background ×1
events ×1
foreground ×1
keyevent ×1
keylistener ×1
listener ×1
performance ×1
screen ×1
service ×1