Android 由于用户不活动,如何在15分钟后获得自动注销表单活动?
这是我的密码Android 由于用户不活动,如何在15分钟后获得自动注销表单活动?,android,Android,这是我的密码 public class LogoutService extends Service { public static CountDownTimer timer; @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); timer = new CountDownTimer(1 * 60 * 1
public class LogoutService extends Service {
public static CountDownTimer timer;
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
timer = new CountDownTimer(1 * 60 * 1000, 1000) {
public void onTick(long millisUntilFinished) {
//Some code
Log.v("Timer::", "Service Started");
}
public void onFinish() {
Log.v("Timer::", "Call Logout by Service");
// Code for Logout
stopSelf();
}
};
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
您可以使用默认方法查找用户交互:
@Override public void onUserInteraction() {
super.onUserInteraction();
}
使用此方法检查用户交互,如果在您的时间限制后没有发现交互,请调用注销方法
您可以使用查找更多信息您可以使用默认方法查找用户交互:
@Override public void onUserInteraction() {
super.onUserInteraction();
}
使用此方法检查用户交互,如果在您的时间限制后没有发现交互,请调用注销方法
您可以使用创建需要由所有活动扩展的BaseActivity类来查找更多信息
public class MyBaseActivity extends Activity {
public static final long DISCONNECT_TIMEOUT = 900000; // 15 min = 15 * 60 * 1000 ms
private Handler disconnectHandler = new Handler(){
public void handleMessage(Message msg) {
}
};
private Runnable disconnectCallback = new Runnable() {
@Override
public void run() {
// Perform any required operation on disconnect
// Logout from app
}
};
public void resetDisconnectTimer(){
disconnectHandler.removeCallbacks(disconnectCallback);
disconnectHandler.postDelayed(disconnectCallback, DISCONNECT_TIMEOUT);
}
public void stopDisconnectTimer(){
disconnectHandler.removeCallbacks(disconnectCallback);
}
@Override
public void onUserInteraction(){
resetDisconnectTimer();
}
@Override
public void onResume() {
super.onResume();
resetDisconnectTimer();
}
@Override
public void onStop() {
super.onStop();
stopDisconnectTimer();
}
}
从另一方面来说,这也会起作用
public class MyBaseActivity extends Activity {
public static final int IDLE_DELAY_MINUTES = 15; // 15 min
@Override
public void onUserInteraction() {
super.onUserInteraction();
delayedIdle(IDLE_DELAY_MINUTES);
}
Handler _idleHandler = new Handler();
Runnable _idleRunnable = new Runnable() {
@Override
public void run() {
//handle your IDLE state
// Logout from app
}
};
private void delayedIdle(int delayMinutes) {
_idleHandler.removeCallbacks(_idleRunnable);
_idleHandler.postDelayed(_idleRunnable, (delayMinutes * 1000 * 60));
}
}
创建需要由所有活动扩展的BaseActivity类
public class MyBaseActivity extends Activity {
public static final long DISCONNECT_TIMEOUT = 900000; // 15 min = 15 * 60 * 1000 ms
private Handler disconnectHandler = new Handler(){
public void handleMessage(Message msg) {
}
};
private Runnable disconnectCallback = new Runnable() {
@Override
public void run() {
// Perform any required operation on disconnect
// Logout from app
}
};
public void resetDisconnectTimer(){
disconnectHandler.removeCallbacks(disconnectCallback);
disconnectHandler.postDelayed(disconnectCallback, DISCONNECT_TIMEOUT);
}
public void stopDisconnectTimer(){
disconnectHandler.removeCallbacks(disconnectCallback);
}
@Override
public void onUserInteraction(){
resetDisconnectTimer();
}
@Override
public void onResume() {
super.onResume();
resetDisconnectTimer();
}
@Override
public void onStop() {
super.onStop();
stopDisconnectTimer();
}
}
从另一方面来说,这也会起作用
public class MyBaseActivity extends Activity {
public static final int IDLE_DELAY_MINUTES = 15; // 15 min
@Override
public void onUserInteraction() {
super.onUserInteraction();
delayedIdle(IDLE_DELAY_MINUTES);
}
Handler _idleHandler = new Handler();
Runnable _idleRunnable = new Runnable() {
@Override
public void run() {
//handle your IDLE state
// Logout from app
}
};
private void delayedIdle(int delayMinutes) {
_idleHandler.removeCallbacks(_idleRunnable);
_idleHandler.postDelayed(_idleRunnable, (delayMinutes * 1000 * 60));
}
}
为此,您应该使用
处理程序。像这样使用它
android.os.Handler handler = new android.os.Handler(); //declear them globly
Runnable runnable=null;
在onCreate()内部初始化Runnable
like
runnable = new Runnable() {
@Override
public void run() {
finish();
}
};
在代码中复制这两个方法
void start() {
handler.postDelayed(runnable, TimeUnit.MINUTES.toMillis(15));
}
void stop(){
handler.removeCallbacks(runnable);
}
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import java.util.concurrent.TimeUnit;
public class BaseActivity extends AppCompatActivity {
private static android.os.Handler handler = new android.os.Handler();
private static Runnable runnable = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (handler == null) {
handler = new Handler();
} else {
handler.removeCallbacks(runnable);
}
if (runnable == null)
runnable = new Runnable() {
@Override
public void run() {
//do your task here
}
};
start();
}
@Override
public void onUserInteraction() {
super.onUserInteraction();
stop();
start();
}
void start() {
handler.postDelayed(runnable, TimeUnit.MINUTES.toMillis(15));
}
void stop() {
handler.removeCallbacks(runnable);
}
}
重写onUserInteraction()
方法的Activity
并调用start()
和stop()
在可运行初始化之后,不要忘记从onCreate()
调用start()方法。
它的run()
方法将在用户处于非活动状态15分钟后调用,在那里执行任务(您希望完成该活动
或其他操作)
////=Updated=strong
将此BaseActivity
粘贴到代码中
void start() {
handler.postDelayed(runnable, TimeUnit.MINUTES.toMillis(15));
}
void stop(){
handler.removeCallbacks(runnable);
}
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import java.util.concurrent.TimeUnit;
public class BaseActivity extends AppCompatActivity {
private static android.os.Handler handler = new android.os.Handler();
private static Runnable runnable = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (handler == null) {
handler = new Handler();
} else {
handler.removeCallbacks(runnable);
}
if (runnable == null)
runnable = new Runnable() {
@Override
public void run() {
//do your task here
}
};
start();
}
@Override
public void onUserInteraction() {
super.onUserInteraction();
stop();
start();
}
void start() {
handler.postDelayed(runnable, TimeUnit.MINUTES.toMillis(15));
}
void stop() {
handler.removeCallbacks(runnable);
}
}
现在扩展所有活动的BaseActivity
,除了AppCompatActivity
或其他类似的活动
public class HomeActivity extends BaseActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
}
}
您是否在run()
方法中执行任务,我建议您启动另一个Activity
并从run()
方法中清除活动堆栈,因为finish()
仅对1个Activity
有效 您应该使用处理程序。像这样使用它
android.os.Handler handler = new android.os.Handler(); //declear them globly
Runnable runnable=null;
在onCreate()内部初始化Runnable
like
runnable = new Runnable() {
@Override
public void run() {
finish();
}
};
在代码中复制这两个方法
void start() {
handler.postDelayed(runnable, TimeUnit.MINUTES.toMillis(15));
}
void stop(){
handler.removeCallbacks(runnable);
}
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import java.util.concurrent.TimeUnit;
public class BaseActivity extends AppCompatActivity {
private static android.os.Handler handler = new android.os.Handler();
private static Runnable runnable = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (handler == null) {
handler = new Handler();
} else {
handler.removeCallbacks(runnable);
}
if (runnable == null)
runnable = new Runnable() {
@Override
public void run() {
//do your task here
}
};
start();
}
@Override
public void onUserInteraction() {
super.onUserInteraction();
stop();
start();
}
void start() {
handler.postDelayed(runnable, TimeUnit.MINUTES.toMillis(15));
}
void stop() {
handler.removeCallbacks(runnable);
}
}
重写onUserInteraction()
方法的Activity
并调用start()
和stop()
在可运行初始化之后,不要忘记从onCreate()
调用start()方法。
它的run()
方法将在用户处于非活动状态15分钟后调用,在那里执行任务(您希望完成该活动
或其他操作)
////=Updated=strong
将此BaseActivity
粘贴到代码中
void start() {
handler.postDelayed(runnable, TimeUnit.MINUTES.toMillis(15));
}
void stop(){
handler.removeCallbacks(runnable);
}
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import java.util.concurrent.TimeUnit;
public class BaseActivity extends AppCompatActivity {
private static android.os.Handler handler = new android.os.Handler();
private static Runnable runnable = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (handler == null) {
handler = new Handler();
} else {
handler.removeCallbacks(runnable);
}
if (runnable == null)
runnable = new Runnable() {
@Override
public void run() {
//do your task here
}
};
start();
}
@Override
public void onUserInteraction() {
super.onUserInteraction();
stop();
start();
}
void start() {
handler.postDelayed(runnable, TimeUnit.MINUTES.toMillis(15));
}
void stop() {
handler.removeCallbacks(runnable);
}
}
现在扩展所有活动的BaseActivity
,除了AppCompatActivity
或其他类似的活动
public class HomeActivity extends BaseActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
}
}
您是否在run()
方法中执行任务,我建议您启动另一个Activity
并从run()
方法中清除活动堆栈,因为finish()
仅对1个Activity
有效 在用户登录后启动此服务,在用户登录后启动此服务15分钟后将调用onFinish()方法,onFinish()方法方法将在15分钟后调用一次。我使用您编写的两个类??任何一个都可以使用。很抱歉,您最近回复了您,您可以告诉我如何在我的活动类中使用mybaseActivity??因为您需要创建一个具有上述功能之一的基本活动。然后,对于所有其他活动,您需要使用基本活动扩展活动。它的继承你能给我推荐一些例子或github吗(我应该使用你编写的两个类吗?任何一个你都可以使用。很抱歉,最近回复了你,你能告诉我如何在我的活动类中使用mybaseActivity吗?因为你需要创建一个具有上述功能之一的基本活动。然后,对于所有其他活动,你需要用基本活动扩展你的活动。它是Inheritance你能为我推荐任何例子或github吗:(所以我调用handler my each activity??你不必从每个活动中调用它(如果你有多个活动)…创建一个BaseActivity类并在该类中扩展AppCompativity,在这里应用该代码(调用你的login activity或在run()调用时调用其他代码),,,,,,,,,请确保您的每个活动都必须扩展BaseActivity类,而不是AppCompatActivity或somthing。您可以给我举一个这样的例子:(如果这对您有效,请检查更新的答案。是的,这对其他人非常有用,感谢您共享代码@ajeet:)所以我调用我的每个活动的处理程序??您不必从每个活动中调用它(如果您有多个活动)…创建一个BaseActivity类,并在该类中创建一个活动,在此处应用该代码(在run()调用时调用您的登录活动或其他),,,,,,,,,请确保您的每个活动都必须扩展BaseActivity类,而不是AppCompatActivity或somthing。您可以给我举一个这样的例子:(如果这对您有效,请检查更新的答案。是的,这对其他人非常有用,感谢您共享代码@ajeet:)