我面临的问题找到如何调用用户定义的方法启动(否则,只需登录一个消息)时,应用程序变得活跃是来自于背景,即前台,如果用户按下home键当应用程序再次到达前台时,该应用程序会转到后台我想显示一个警告框。可以请某些人告诉我如何执行此检查,以了解应用程序是否已到达前台或提供某些链接。我不明白要搜索什么对于。有些网站提到我可以覆盖OnResume()
。然而,即使我回到这个活动,每当我的活动从一个活动启动到另一个时,都会调用此方法。我只需要在用户从背景到前景时才调用此方法。如何识别活动从背景
回答
这是一个简单的解决方案。
@Override
protected void onPause()
{
super.onPause();
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
isScreenOn = powerManager.isScreenOn();
OnPause = true;
}
@Override
protected void onResume()
{
super.onResume();
OnResume = true;
if (!isScreenOn)
{
// your code;
}
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
if(OnPause == true && OnResume == true && !isScreenOn)
{
YourActivity.this.finish();
}
isScreenOn = false;
OnPause = false;
OnResume = false;
}
这里isScreenOn,在onPause,是的onResume布尔值。 当你的手机屏幕得到锁定,那么应用程序进去的onPause(),它检查“isScreenON”,然后变为“的onStop()”,其中isScreenOn设置为false。
当你的活动都在前台“的onResume”之称。它检查isScreenON,它绝对完美。直到他进入password.This应用程序将仅适用于单个用户(设备ID特定的)使用.Couldü请告诉我如何写一个方法/(该法)
我会建议使用超时密码。因此,当用户使用该应用程序时,密码将在x分钟内保持“正常”。
试想一下,如果有人在早上推出的应用程序,可以追溯到homemenu,并在您仍想先登录用户晚上再启动它?
超时日期可以很容易地存储在SharedPreferences。 (也请不要将密码存储在SharedPreferences纯文本,但保存它的哈希值。
是@ Rcdk.The用户不能使用该应用程序如果您有解决方案,请确定该应用已进入活动状态。 – Joyson 2013-04-08 09:32:39
解决方法很简单
考虑四种方法的onCreate()的onResume,在onPause()的onSaveInstanceState(捆绑outState)。
你需要创建一个长的全局变量为这项活动
现在目前的时间分配电流,这个变量中的onCreate(),如果你的Bundle savedInstanceState
为null,其他明智的savedInstanceState
在的onResume检查当前时间之间的差异millsec System.currentTimeMillis();
和这个全局变量,如果是大于说1秒(可根据您的需求会更高)显示一个警告框询问密码
在的onPause()将System.currentTimeMillis();
保存为全局变量。
在onSaveInstanceState(Bundle outState)
存储全局变量的值捆绑在的onCreate恢复()。
示例代码
import android.os.Bundle;
import android.widget.Toast;
import android.app.Activity;
public class MainActivity extends Activity {
long timeLastPause=0;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState==null)
{
timeLastPause=System.currentTimeMillis();
//Toast.makeText(this, "App created just now", Toast.LENGTH_LONG).show();
}
else
{
timeLastPause= savedInstanceState.getLong("timeLastPause");
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if((System.currentTimeMillis()-timeLastPause)>1000)
{
Toast.makeText(this, "the app becomes active that is comes to foreground from background", Toast.LENGTH_LONG).show();
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
timeLastPause=System.currentTimeMillis();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
outState.putLong("timeLastPause", timeLastPause);
}
}
[编辑]
现在好了任意数量的活动[:-0这是棘手的,希望它会工作。我在一些项目中实现这一点,工作得很好]
清单中
<application
android:name=".TrickyApplication"
...
>
现在,在每一个活动onResume()
TrickyApplication app = ((TrickyApplication) this.getApplication());
if (System.currentTimeMillis() - app.lastPause > 1000) {
Toast.makeText(this, "Show Password Dlg Now", Toast.LENGTH_LONG).show();
}
创建TrickyApplication.java
public class TrickyApplication extends Application {
public long lastPause;
@Override
public void onCreate() {
super.onCreate();
lastPause = 0;
}
}
现在在每一个活动onPause()
((TrickyApplication) this.getApplication()).lastPause = System
.currentTimeMillis();
注意,密码对话框会也显示,第一次可以用一些共享偏好管理这一点,并没有设置它,直到你的用户不显示对话框
之前设置一个密码左右,然后再检查县- 1. 背景中的活动识别
- 2. 如何动画android活动背景
- 3. 如何识别启动活动名称?
- 4. 如何检测和计数当活动从背景到前景
- 5. 识别没有激活的背景窗口
- 6. 如何识别活动中的RelativeLayout
- 7. 活动背景变黑!
- 8. 活动链接背景
- 9. 背景中的语音识别
- 10. JQuery不识别#FFFFFF的背景颜色
- 11. 如何从透明覆盖片段中禁用背景活动
- 12. 如何从活动中删除全局背景色android
- 13. 识别Android中的活动?
- 14. C#活动程序识别
- 15. 如何从另一个活动中识别Tabhost选项卡ID
- 16. 谷歌如何识别文字的颜色和背景?
- 17. 识别移动物体并将其与背景区分开来?
- 18. 从网页中识别具有白色背景的图像
- 19. ProgressDialog背景活动淡出动画
- 20. 如何获得一个活动与背景和另一个活动在Android透明背景颜色
- 21. Textfield背景色白色,活动灰色背景色
- 22. 如何激活Bootstrap模态背景?
- 23. 如何识别活动从窗口小部件或打开方式发送任何意图活动从部件
- 24. 如何动画UIImageView背景
- 25. 活动中暗淡或模糊背景
- 26. 更改活动中的背景颜色。
- 27. Android调用背景中的活动
- 28. 透明背景到Android活动类
- 29. 更改活动div的背景颜色
- 30. 活动中的背景位图图像?
我想你的代码,我已经在这里添加了一个吐司消息(//你的代码;)然而,当我第一次启动到活动即使再敬酒消息是executed.This吐司应该,如果我只执行从背景到前景 – Joyson 2013-04-17 10:17:56
boolean isScreenOn = true; public static boolean OnPause = false; public static boolean OnResume = false; 为您的活动中的变量设置这些默认值。 – 2013-04-17 12:18:00
嘿萨加尔日Thnx一吨这个作品很酷!但是我想实现这个多activities.Do我需要在所有类别中写这个逻辑,我想使它这样的全球性,每当我去后台而来前景应该调用我的代码的任何活动。 – Joyson 2013-04-19 09:41:15