【发布时间】:2015-06-11 06:51:48
【问题描述】:
您好,我想在我的 Android 应用闲置一段时间后自动退出。 在 onPause 的第二个活动中,我将应用程序暂停时的时间保存在变量中。 在方法 onresume 的 MainActivity 中,我将应用程序重新启动的时间保存在另一个变量中 并计算两个变量之间的差异。如果这个差值大于一个确定的时间, 例如 10 秒有注销。
我的 MainActivity 的这段代码:
public class MainActivity extends Activity {
private EditText username,password;
public static final String MyPREFERENCES = "MyPrefs" ;
public static final String name = "nameKey";
public static final String pass = "passwordKey";
SharedPreferences sharedpreferences;
public static Long t0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
username = (EditText)findViewById(R.id.editText1);
password = (EditText)findViewById(R.id.editText2);
username.setText("***");
password.setText("***");
t0 = Welcome.t0;
}
@Override
protected void onResume() {
sharedpreferences=getSharedPreferences(MyPREFERENCES,
Context.MODE_PRIVATE);
if (sharedpreferences.contains(name))
{
if(sharedpreferences.contains(pass)){
Intent i = new Intent(this,SecondActivity.class);
startActivity(i);
}
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String strDate = sdf.format(c.getTime());
System.out.println(strDate);
Date d;
try {
d = sdf.parse(strDate);
long second2=d.getSeconds();
long ts=Math.abs(second2-t0);
if (ts>=10){
logout();
Intent i2 = new Intent(this,MainActivity.class);
startActivity(i2);
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
super.onResume();
}
public void login(View view){
Editor editor = sharedpreferences.edit();
String u = username.getText().toString();
String p = password.getText().toString();
if(u.equals("***") && p.equals("***")){
editor.putString(name, u);
editor.putString(pass, p);
editor.commit();
Intent i = new Intent(this,SecondActivity.Welcome.class);
startActivity(i);
}
else{
Toast.makeText(MainActivity.this, "ko", Toast.LENGTH_SHORT).show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void onPause() {
super.onPause();
this.finish();
}
public void closing() {
finish();
}
public void logout(){
SharedPreferences sharedpreferences = getSharedPreferences
(MainActivity.MyPREFERENCES, Context.MODE_PRIVATE);
Editor editor = sharedpreferences.edit();
editor.clear();
editor.commit();
moveTaskToBack(true);
this.finish();
}
}
Second Activity的代码是:
public class Second extends Activity {
static Long t0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_welcome);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.welcome, menu);
return true;
}
public void logout(View view){
SharedPreferences sharedpreferences = getSharedPreferences
(MainActivity.MyPREFERENCES, Context.MODE_PRIVATE);
Editor editor = sharedpreferences.edit();
editor.clear();
editor.commit();
moveTaskToBack(true);
this.finish();
}
public void exit(View view){
moveTaskToBack(true);
this.finish();
}
public void onPause() {
super.onPause();
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String strDate = sdf.format(c.getTime());
Date d;
try {
d = sdf.parse(strDate);
long second=d.getSeconds();
Welcome.t0=second;
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.finish();
}
public void closing() {
finish();
}
}
这个cose不起作用,因为第一次它可以正常工作,但第二次它不起作用,没有注销。我该如何解决这个问题?
【问题讨论】:
-
设置AlarmReceiver并使用广播接收器?
标签: java android time login logout