您好,我希望在确定的不活动时间后自动退出我的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();
}
}
第二活动的代码是:
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();
}
}
这种做法很有效,因为它在第一次工作正常但第二次没有工作时,没有注销。我该如何解决这个问题?
答案 0 :(得分:1)
设置闹钟:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MINUTE, "YourTimeinMinutes"); // you can use Calendar.Seconds etc according to your need
Intent intent = new Intent(YourActivity.this, AlarmReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(YourActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// Get the AlarmManager service
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
AlarmReceiver.class
public class AlarmReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
//your logic
}
}
不要忘记在应用程序标记内的清单中添加接收器:
<receiver android:name=".AlarmReceiver" ></receiver>
添加注销你的广播onPause。
答案 1 :(得分:0)
我建议您使用countDownTimer
,一打开应用程序就会启动。
new CountDownTimer(10000, 1000) {//CountDownTimer for 10 seconds
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
//logout here.
SharedPreferences sharedpreferences = getSharedPreferences
(MainActivity.MyPREFERENCES, Context.MODE_PRIVATE);
Editor editor = sharedpreferences.edit();
editor.clear();
editor.commit();
moveTaskToBack(true);
this.finish();
}
}
.start();