এখানে একটি সম্পূর্ণ সমাধান রয়েছে যা কয়েক মিনিট পরে (যেমন 3 মিনিট) ব্যবহারকারীর নিষ্ক্রিয়তা পরিচালনা করে। অ্যাপটি সময় শেষ হওয়ার পরে ব্যাকগ্রাউন্ডে থাকা অবস্থায় অ্যাক্টিভিটি অগ্রভাগে লাফিয়ে ফেলার মতো সাধারণ সমস্যাগুলি সমাধান করে।
প্রথমত, আমরা একটি বেসঅ্যাক্টিভিটি তৈরি করি যা অন্যান্য সমস্ত ক্রিয়াকলাপ প্রসারিত করতে পারে।
এটি বেসঅ্যাক্টিভিটি কোড।
package com.example.timeout;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.Window;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import javax.annotation.Nullable;
public class BaseActivity extends AppCompatActivity implements LogoutListener {
private Boolean isUserTimedOut = false;
private static Dialog mDialog;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((TimeOutApp) getApplication()).registerSessionListener(this);
((TimeOutApp) getApplication()).startUserSession();
}
@Override
public void onUserInteraction() {
super.onUserInteraction();
}
@Override
protected void onResume() {
super.onResume();
if (isUserTimedOut) {
//show TimerOut dialog
showTimedOutWindow("Time Out!", this);
} else {
((TimeOutApp) getApplication()).onUserInteracted();
}
}
@Override
public void onSessionLogout() {
isUserTimedOut = true;
}
public void showTimedOutWindow(String message, Context context) {
if (mDialog != null) {
mDialog.dismiss();
}
mDialog = new Dialog(context);
mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
mDialog.setContentView(R.layout.dialog_window);
mDialog.setCancelable(false);
mDialog.setCanceledOnTouchOutside(false);
TextView mOkButton = (TextView) mDialog.findViewById(R.id.text_ok);
TextView text_msg = (TextView) mDialog.findViewById(R.id.text_msg);
if (message != null && (!TextUtils.isEmpty(message)) && (!message.equalsIgnoreCase("null"))) {
text_msg.setText(message);
}
mOkButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mDialog != null){
mDialog.dismiss();
Intent intent = new Intent(BaseActivity.this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
}
}
});
if(!((Activity) context).isFinishing())
{
//show dialog
mDialog.show();
}
}
}
এরপরে, আমরা আমাদের "লগআউট শ্রোতাদের" জন্য একটি ইন্টারফেস তৈরি করি
package com.example.timeout;
public interface LogoutListener {
void onSessionLogout();
}
অবশেষে, আমরা একটি জাভা ক্লাস তৈরি করি যা "অ্যাপ্লিকেশন" প্রসারিত করে
package com.example.timeout;
import android.app.Application;
import java.util.Timer;
import java.util.TimerTask;
public class TimeOutApp extends Application {
private LogoutListener listener;
private Timer timer;
private static final long INACTIVE_TIMEOUT = 180000; // 3 min
public void startUserSession () {
cancelTimer ();
timer = new Timer ();
timer.schedule(new TimerTask() {
@Override
public void run() {
listener.onSessionLogout ();
}
}, INACTIVE_TIMEOUT);
}
private void cancelTimer () {
if (timer !=null) timer.cancel();
}
public void registerSessionListener(LogoutListener listener){
this.listener = listener;
}
public void onUserInteracted () {
startUserSession();
}
}
দ্রষ্টব্য: আপনার মেনিফেস্ট ফাইলের ভিতরে আপনার অ্যাপ্লিকেশন ট্যাগটিতে "টাইমআউট অ্যাপ" শ্রেণিটি যুক্ত করতে ভুলবেন না
<application
android:name=".TimeOutApp">
</application>