1

我有一个应用程序,您必须像使用密码的用户一样登录。

这个应用程序需要是安全的,所以当用户在一段确定的时间(比如说,5 分钟)内没有触摸屏幕时,它需要注销用户。

问题是,一旦用户登录,他可以进行许多活动,而不仅仅是一个,我想知道Android中是否有办法知道用户是否可以在几分钟后退出。

我正在考虑使用 onInterceptTouchEvent(MotionEvent ev) 方法,但问题是,¿我必须在每个活动中使用此方法吗?¿ 在 Android 中还有另一种更简单的管理方法吗?

非常感谢!

4

2 回答 2

1

1.实现此目的的一种方法System.currentTimeMillis()是在用户登录应用程序时获取当前时间(使用 )。让我们把它保存在一个变量t1中。

2.启动一个服务,它将监视/检查/执行以下事情:

2a. 每当用户触摸您的任何活动时,将值设置t1为当前时间。

2b。连续获取当前时间 ( ) 并计算和(ie )t2之间的时间间隔。如果此延时等于或大于 5 分钟,您可以调用该函数。t1t2t2 - t1logOut()

是的,您必须从每个活动中通知后台服务用户存在。尽管Carnal提供的解决方案将大大减少您实现这一目标的努力。

于 2012-10-31T13:08:46.093 回答
1

Activity您可以像这样创建一个,而不是在 every 上实现Activity这个:

public class BaseActivity extends Activity

onInterceptTouchEvent在您的BaseActivity.

然后从所有其他Activities你将不得不扩展BaseActivity

更新:onTouch如果你想在整个屏幕上监听事件, 你将不得不使用。这要求在您的每个 xml 文件中Activity,您必须为您的 xml( 、、或其他)id的根视图提供一个。因此,为了让您从其他人那里获取输入,您必须将您的根视图传递给它,如下所示:LinearlayoutRelativelayoutFramelayoutBaseActivityActivities

public class MyActivity extends BaseActivity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);
        super.setRootView(findViewById(R.id.rootView));
    }
}

public class BaseActivity extends Activity implements OnTouchListener{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    public void setRootView(View rootView){
        rootView.setOnTouchListener(this);
    }

    public boolean onTouch(View v, MotionEvent event) {
        Log.d("BaseActivity", "onTouch!");
        return super.onTouchEvent(event);
    }
}
于 2012-10-31T13:08:56.520 回答