Need help regarding CountDownTimer in onbackpressed - android

I have been trying to create the onbackpressed() function using countdown but i don't know what to do. Kindly help me to create the onbackpressed function using countdown

private static boolean onbackpressonce = false;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// using countdown timer
#Override
public void onBackPressed() {
if (!onbackpressonce) {
Toast.makeText(this, "Press back again to exit", Toast.LENGTH_SHORT).show();
onbackpressonce = true;
} else {
super.onBackPressed();
}
new CountDownTimer(3000, 1000) {
#Override
public void onTick(long millisUntilFinished) {
}
#Override
public void onFinish() {
onbackpressonce = false;
}
}.start();
}

This will exit your app on the second onBackpressed within 1100 millis
private long mLastBackClick = 0;
#Override
public void onBackPressed() {
if (System.currentTimeMillis() - mLastBackClick < 1100) {
super.onBackPressed();
} else {
Toast.makeText(MainActivity.this, "Press back again to Exit", Toast.LENGTH_SHORT).show();
mLastBackClick = System.currentTimeMillis();
}
}

Related

Press Double Back To Exit

Android Webview
current code in my app works like this:
When user press back single time it will shows button asking "Do you want to quit?" shows yes or no options. when we select Yes it exit app and show interstitial ad. if you press No it will remains in the activity.
What I want is:
When user press back it will go to previous activity. If user double tap back button then it will ask for exit and if user select Yes. user will exit app and interstitial ad appears.
Please help me to solve this issue.
Main Activity:
public class MainActivity extends Activity{
private Fragment contentFragment;
String testDevice = "D0A04359EA1ECE9BA0CD4B6F457A9991";
String testDevice2 = "63C3530DA03C191310DB9AB8F0672E5C";
String testDevice3 = "801F2141A1DC3F743363AFDFDC42AF3A";
private InterstitialAd mInterstitialAd;
private AdView mAdView;
boolean displayAd = false;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView mainWebView = (WebView) findViewById(R.id.mainWebView);
WebSettings webSettings = mainWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mainWebView.setWebViewClient(new MyCustomWebViewClient());
mainWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
mainWebView.loadUrl(this.getString(R.string.channel_url));
mAdView = (AdView) findViewById(R.id.ad_view);
// Create an ad request. Check your logcat output for the hashed device ID to
// get test ads on a physical device. e.g.
// "Use AdRequest.Builder.addTestDevice("ABCDEF012345") to get test ads on this device."
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(testDevice)
.addTestDevice(testDevice2)
.addTestDevice(testDevice3)
.build();
mAdView.setAdListener(new AdListener() {
#Override
public void onAdLoaded() {
displayAd = true;
// View servername = findViewById(R.id.txt_List);
// RelativeLayout.LayoutParams layoutparams =
(RelativeLayout.LayoutParams) servername.getLayoutParams();
// layoutparams.addRule(RelativeLayout.BELOW, mAdView.getId());
// layoutparams.removeRule(RelativeLayout.ALIGN_PARENT_TOP);
// servername.setLayoutParams(layoutparams);
}
#Override
public void onAdFailedToLoad(int errorCode) {
if (!displayAd) {
}
}
#Override
public void onAdClosed() {
// Proceed to the next level.
}
});
// Start loading the ad in the background.
mAdView.loadAd(adRequest);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
// Create the InterstitialAd and set the adUnitId (defined in values/strings.xml).
mInterstitialAd = newInterstitialAd();
loadInterstitial();
}
private class MyCustomWebViewClient extends WebViewClient {
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
private InterstitialAd newInterstitialAd() {
InterstitialAd interstitialAd = new InterstitialAd(this);
interstitialAd.setAdUnitId(getString(R.string.interstitial_ad_unit_id));
interstitialAd.setAdListener(new AdListener() {
#Override
public void onAdLoaded() {
}
#Override
public void onAdFailedToLoad(int errorCode) {
}
#Override
public void onAdClosed() {
// Proceed to the next level.
finish();
//goToNextLevel();
}
});
return interstitialAd;
}
private void showInterstitial() {
// Show the ad if it's ready. Otherwise toast and reload the ad.
if (mInterstitialAd != null && mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
} else {
finish();
}
}
#Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.main, menu);
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
private void loadInterstitial() {
// Disable the next level button and load the ad.
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(testDevice)
.addTestDevice(testDevice2)
.addTestDevice(testDevice3)
.setRequestAgent("android_studio:ad_template").build();
mInterstitialAd.loadAd(adRequest);
}
/*
* We call super.onBackPressed(); when the stack entry count is > 0. if it
* is instanceof EmpListFragment or if the stack entry count is == 0, then
* we prompt the user whether to quit the app or not by displaying dialog.
* In other words, from EmpListFragment on back press it quits the app.
*/
#Override
public void onBackPressed() {
onShowQuitDialog();
}
public void onShowQuitDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(false);
builder.setMessage("Do You Want To Quit?");
builder.setPositiveButton(android.R.string.yes,
new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int id) {
showInterstitial();
}
});
builder.setNegativeButton(android.R.string.no,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
builder.create().show();
}
}
This is the easiest code possible:
private static final int TIME_DELAY = 2000;
private static long back_pressed;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
#Override
public void onBackPressed() {
if (back_pressed + TIME_DELAY > System.currentTimeMillis()) {
super.onBackPressed();
} else {
Toast.makeText(getBaseContext(), "Press once again to exit!",
Toast.LENGTH_SHORT).show();
}
back_pressed = System.currentTimeMillis();
}
}
A temp flag will do the thing.
add this code in your onBackPressed() method.
boolean isSecond;
#Override
public void onBackPressed(){
if (isSecond) {
// Open your dialog here
}
isSecond = true;
new Handler() . postDelayed(new Runnable() {
#Override
public void run(){
isSecond = false;
}
}, 2000);
}
boolean doubleBackToExitPressedOnce = false;
#Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
onShowQuitDialog();
new Handler().postDelayed(new Runnable() {
#Override
public void run() {
doubleBackToExitPressedOnce=false;
}
}, 2000);
}
Try following code :
int backFlag = 0;
#Override
public void onBackPressed() {
backFlag ++;
if(backflag == 1){
super.onBackPressed();
// go to previous activity
}
else if(backFlag == 2){
// ask user to exit
}
new Handler().postDelayed(new Runnable() {
#Override
public void run() {
backFlag=0;
}
}, 2000);
}
There is no built-in function for double onBackPressed() so you have to construct your own version of it. The android system provides a Handler on which you can call postDelayed to measure the time between two and one click.
e.g. like this
boolean backPressed = false;
boolean backPressedTwice = false;
#Override
public void onBackPressed() {
if(!backPressed){
backPressed = true;
new Handler().postDelayed(new Runnable() {
#Override
public void run() {
if(!backPressedTwice)
MainActivity.this.finish(); // go back to previous activity
}
}, 500);
}
if(backPressed) {
// it's clicked twice
backPressedTwice = true; // cancel the handler so it does not finish the activity
onShowQuitDialog();
}
}
Demo for your task:
public class MainActivity extends AppCompatActivity {
Handler handler = new Handler();
boolean ShowDialog = false;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler = new Handler(getMainLooper());
}
#Override
public void onBackPressed() {
if (!ShowDialog) {
this.ShowDialog = true;
handler.postDelayed(runnable, 2000);// time setting .. current is 2 sec
} else {
handler.removeCallbacks(runnable);
ShowDialog = false;
ShowDailog();
}
}
private void ShowDailog() {
Toast.makeText(this, "show dialog here", Toast.LENGTH_LONG).show();
}
Runnable runnable = new Runnable() {
#Override
public void run() {
ShowDialog = false;
MainActivity.super.onBackPressed();
}
};
}
You can do something like this
private long backPressedTime = 0;
private long backPressThreshold = 400;
private Handler mHandler = new Handler();
private Runnable bacPressedRunnable = new Runnable() {
#Override
public void run() {
MYActivity.super.onBackPressed();
}
};
#Override
public void onBackPressed() {
if(backPressedTime = 0){
backPressedTime = Systemm.currentTimeInMillis();
mHandler.postDelayed(bacPressedRunnable,backPressThreshold);
}else if(System.currentTimeInMillis()-backPressedTime >= backPressThreshold){
mHandler.removeMessages(bacPressedRunnable);
onShowQuitDialog();
}else{
super.onBackPressed();
}
backPressedTime = 0;
}
Exit android App on double back press use following updated code. It may solve your problem
private boolean doubleBackToExitPressedOnce;
private void onApplicationBackPressed() {
if (doubleBackToExit) {
moveTaskToBack(true);
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
return;
}
doubleBackToExit= true;
Utilities_dialer.showToastMessage(this, "Press Again To Exit");
//use your dialog box or toast message
new Handler().postDelayed(new Runnable() {
#Override
public void run() {
doubleBackToExit= false;
}
}, 2000);
}
Try this.. It may help you.
Boolean doubleBackToExitPressedOnce = true;
#Override
public void onBackPressed() {
if(doubleBackToExitPressedOnce){
// Do what ever you want
doubleBackToExitPressedOnce = false;
} else{
// Do exit app or back press here
super.onBackPressed();
}
}

Android back button app is not closing

i am using the below code for back button but it cant work it does not exit the app if i am pressing the back button of userdevice
private Boolean exit = false;
#Override
public void onBackPressed() {
if (exit) {
this.finish(); // finish activity
} else {
Toast.makeText(this, "Press Back again to Exit.",
Toast.LENGTH_SHORT).show();
exit = true;
new Handler().postDelayed(new Runnable() {
#Override
public void run() {
exit = false;
}
}, 3 * 1000);
}
}
private Boolean exit = false;
#Override
public void onBackPressed() {
if (exit) {
this.finishAffinity();
} else {
Toast.makeText(this, "Press Back again to Exit.",
Toast.LENGTH_SHORT).show();
exit = true;
new Handler().postDelayed(new Runnable() {
#Override
public void run() {
exit = false;
}
}, 3 * 1000);
}
}
Change Your Code Like This.
private Boolean exit = false;
#Override
public void onBackPressed() {
if (exit) {
this.finishAffinity();
} else {
Toast.makeText(this, "Press Back again to Exit.",
Toast.LENGTH_SHORT).show();
exit = true;
new Handler().postDelayed(new Runnable() {
#Override
public void run() {
exit = false;
}
}, 3 * 1000);
}
}
use this...
private long lastBackPressTime = 0;
#Override
public void onBackPressed() {
if (this.lastBackPressTime < System.currentTimeMillis() - 4000) {
//Add Snhackbar or Toast, whatever you want
this.lastBackPressTime = System.currentTimeMillis();
} else {
if (toast != null) {
toast.cancel();
}
moveTaskToBack(true);
}
}
keep a boolean toClose=false;
and in onBackPressed() method use this code
if (toClose)
super.onBackPressed();
else
{
toClose=true;
Utils.showToast(context,getString(R.string.back_again));
new Handler().postDelayed(new Runnable() {
#Override
public void run() {
toClose=false;
}
},2000);
}
This may work. Use finishAffinity() instead.
boolean doubleBackToExitPressedOnce = false;
public void onBackPressed(){
if(doubleBackToExitPressedOnce)
{
finishAffinity();
return;
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please click back again to exit", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
#Override
public void run() {
doubleBackToExitPressedOnce = false;
}
},3500);
}
Use this to close the app on pressing back button.
#Override
public void onBackPressed() {
Intent intent = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
}
This will work for you
Define this it globally
private boolean doubleBackToExitProceed = false;
#Override
public void onBackPressed() {
if (doubleBackToExitProceed) {
finish();
return;
}
doubleBackToExitProceed = true;
Toast.makeText(this, "Press Back again to Exit.", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
#Override
public void run() {
doubleBackToExitProceed = false;
}
}, 2000);// time in milliseconds.
}

How to stop timer

Hi I have a button and a timer
I want to run a timer but when I click a button the timer should stop and the method test() should be called.
This is my code:
public class MainActivity extends AppCompatActivity {
Button button;
int a=1;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
a=6;
}
});
new CountDownTimer(30000, 4000) {
#Override
public void onTick(long millisUntilFinished) {
if (a<5)
{
Toast.makeText(MainActivity.this, ""+a, Toast.LENGTH_SHORT).show();
}
}
#Override
public void onFinish() {
test();
}
}.start();
}
private void test ()
{
Toast.makeText(this, "test is run", Toast.LENGTH_SHORT).show();
}
}
You have to define it first:
CountDownTimer yourCountDownTimer = new CountDownTimer(30000, 4000) {
public void onTick(long millisUntilFinished) {
if (a<5)
{
Toast.makeText(MainActivity.this, ""+a, Toast.LENGTH_SHORT).show();
}
}
public void onFinish() {
test();
}
}.start();
yourCountDownTimer.cancel(); //To Stop Timer
using cancel key word
timer.cancel();
timer.purge();
private CountDownTimer timer;
timer=new CountDownTimer(30000, 4000) {
#Override
public void onTick(long millisUntilFinished) {
if (a<5)
{
Toast.makeText(MainActivity.this, ""+a, Toast.LENGTH_SHORT).show();
}
}
#Override
public void onFinish() {
test();
}
}.start();
call timer.cancel() on onClick() metod of your button Listener.

Android Quiz App countdown

my code is given below in that for Each Question there is i.e. when count down ends its jump to next question and count down starts again, i want that when the countdown ends it should jump to the result page..and even after jumping to next question countdown should not stop.
#Override
protected void onResume()
{
super.onResume();
questionPlay = db.getRuleQuestionMode(mode);
totalQuestion = questionPlay.size();
mCountDown = new CountDownTimer(TIMEOUT, INTERVAL) {
#Override
public void onTick(long millisUntilFinished) {
progressBar.setProgress(progressValue);
progressValue++;
}
#Override
public void onFinish() {
mCountDown.cancel();
}
};
showQuestion(index);
db.close();
}
private void showQuestion(final int index) {
if (index < totalQuestion) {
thisQuestion++;
txtQuestion.setText(String.format("%d/%d", thisQuestion, totalQuestion));
progressBar.setProgress(0);
progressValue = 0;
txtView1.setText(questionPlay.get(index).getQus());
btnA.setText(questionPlay.get(index).getAnswerA());
btnB.setText(questionPlay.get(index).getAnswerB());
btnC.setText(questionPlay.get(index).getAnswerC());
btnD.setText(questionPlay.get(index).getAnswerD());
mCountDown.start();
Button btnca =(Button) findViewById(R.id.btnca);
btnca.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
StyleableToast st= new StyleableToast(getApplicationContext(),questionPlay.get(index).getCorrectAnswer(), Toast.LENGTH_SHORT);
st.setBackgroundColor(Color.RED);
st.setTextColor(Color.WHITE);
st.setCornerRadius(3);
st.show();
score-=10;
}
});
} else {
Intent intent = new Intent(this, Done.class);
Bundle dataSend = new Bundle();
dataSend.putInt("SCORE", score);
dataSend.putInt("TOTAL", totalQuestion);
dataSend.putInt("CORRECT", correctAnswer);
intent.putExtras(dataSend);
startActivity(intent);
finish();
}
}
#Override
public void onClick(View v) {
mCountDown.cancel();
if (index < totalQuestion) {
Button clickedButton = (Button) v;
if (clickedButton.getText().equals(questionPlay.get(index).getCorrectAnswer())) {
score += 10; // increase score
correctAnswer++; //increase correct answer
showQuestion(++index);
} else {
vibrator.vibrate(50);
showQuestion(++index); // If choose right , just go to next question
}
txtScore.setText(String.format("%d", score));
//clickedButton.setBackgroundColor(Color.YELLOW);;
}
}
#Override
public void onStop() {
if(mCountDown != null)
mCountDown.cancel();
super.onStop();
}
remove mCountDown.start(); in your showQuestion method.
in your onFinish method, call your results page from there

My Application is not exiting when I double tap the Hardware Back Button

I'm trying to exit my application when the user double taps the HardWare Back Button, I've used the following code in my application:
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
Dashboard_Activity.this.finish();
return;
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please click BACK again to exit",
Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
#Override
public void run() {
doubleBackToExitPressedOnce = false;
}
}, 2000);
Here when the user Double Taps the Hardware Back Button the same activity appears again and again, but the app doesn't exits. Can you please help me fixing the issue.
Try the following:
private static long back_pressed;
#Override
public void onBackPressed()
{
if (back_pressed + 2000 > System.currentTimeMillis()) super.onBackPressed();
else Toast.makeText(getBaseContext(), "Press once again to exit!", Toast.LENGTH_SHORT).show();
back_pressed = System.currentTimeMillis();
}
Source
Try This Method Any where in your code Out side of Oncreate, Working for me
#Override
public void onBackPressed()
{
try
{
//pop up Window closed.
if (doubleBackToExitPressedOnce)
{
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable()
{
#Override
public void run()
{
doubleBackToExitPressedOnce=false;
}
}, 2000);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
First, create SplashScreenActivity:
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finish();
}
Then in your activity(or in BaseActivity) add this variable as class member:
private long milis;
And override onBackPressed():
#Override
public void onBackPressed() {
if(milis + 2000 > System.currentTimeMillis()){
Intent intent = new Intent(this, SplashScreenActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}else{
milis = System.currentTimeMillis();
}
}

Categories

Resources