Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας παιδιά!

 

Έχω μια εφαρμογή android φτιαγμένη σε webview (html+javascript). Eίναι η εφαρμογή που έχω στην υπογραφή μου.

Έχω το εξής πρόβλημα. Όταν ας πούμε χτυπήσει το viber ή πάρουν τηλέφωνο όπως είναι λογικό εμφανίζεται στην οθόνη το μήνυμα του viber ή το εν λόγω τηλέφωνο. Κάθε φορά που κλείνει η εφαρμογή την έχω ορίσει να τρέχει από την αρχή (ακόμα και στην onPause κατάσταση και αυτό γιατί δεν ξέρω πως να κάνω το χρονόμετρο να σταματάει).

 

Υπάρχει κάποιος τρόπος να παγώνω την εφαρμογή (σε στυλ pause) και να συνεχίζει από εκεί που σταμάτησε;

 

Μπορείτε να δοκιμάσετε την εφαρμογή κατεβάζοντάς την από εδω.

Πιστέψτε με δεν βάζω το λινκ για λόγους διαφήμισης κτλ......

 

Ξέρω ότι θα πρέπει να σας στείλω κώδικα για να δείτε τι μπορεί να γίνει απλά προς στιγμήν ρωτάω μήπως υπάρχει κάποιος έτοιμος αυτοματοποιημένος τρόπος.

 

Αν όχι θα πάμε και στον κώδικα.

Δημοσ.

Γιατί δε βάζεις κώδικα να δει κάποιος που ξέρει; Σε πιστεύω ότι δεν κάνεις διαφήμιση, αλλά γιατί να εκτελέσει κάποιος άγνωστο κώδικα στη συσκευή του;

Δημοσ.

Την εφαρμογή την έχω στο slideme.org (δεν την έχω βάλει ακόμα στο playstore λόγω των 25 δολαρίων).

Επίσης μπορείτε να δοκιμάσετε μια online εκδοχή εδώ μόνο με chrome όμως επειδή χρησιμοποιώ sqlite για την αποθήκευση του score.

https://dl.dropboxusercontent.com/u/179231917/mq_download_site/index.html

Δημοσ.

Το timer ξεκινάει ως 100 και είναι μια πράσινη μπάρα που λιγοστεύει όσο περνάει ο χρόνος (για αυτό ήθελα να δείτε την εφαρμογή).

Το παρακάτω ας πούμε πως γίνεται pause και να ξανασυνεχίζει το timer από εκεί που σταμάτησε;

function countdown(){
	$('#timer').css('width',timer + '%');
	if(timer<=0){
		if(game_type=="marathon"){
			lives--;
		}
		$('#time_is_up').show();
		AndAud.playAudio(wrong_audio, $("input[name='mute_hidden']").val());
		clearTimeout(counter);
		setTimeout(doitagain,2000);
		return;
	}
	//Τι είδος παιχνιδιού είναι Marathon ή Time trial
	if(game_type=="marathon"){
		if(c_answers < 10){
			timer -= (100/10); //10 δευτερόλεπτα
		}else if(c_answers >= 10 && c_answers < 20){
			timer -= (100/9); //9 δευτερόλεπτα
		}else if(c_answers >= 20 && c_answers < 30){
			timer -= (100/8); //8 δευτερόλεπτα
		}else if(c_answers >= 30 && c_answers < 40){
			timer -= (100/7); //7 δευτερόλεπτα
		}else if(c_answers >= 40 && c_answers < 50){
			timer -= (100/6); //6 δευτερόλεπτα
		}else if(c_answers >= 50){
			timer -= (100/5); //5 δευτερόλεπτα
		}
		
	}else if(game_type=="time_trial"){
		
	    timer -= (100/60) ; //60 δευτερόλεπτα
	}
	counter = setTimeout(countdown,1000);
}
Δημοσ. (επεξεργασμένο)

Δεν ξερω απο android, φανταζομαι ομως ειναι τοσο απλο αυτο που ζητας που δεν παιζει με 5 λεπτα googling να μην το βρεις.

Μετα απο 2 λεπτα googling βρηκα οτι OnPause κανει cancel to timer και δεν μπορεις να το κανεις resume, μονο να δημιοργησεις καινουργιο, οποτε απλα θα κανεις ενα καινουργιο με χρονο αυτον που υπολειποτανε πριν το pause.

Οποτε στο OnPause θα σωζεις τον χρονο του timer, και στο OnResume θα κανεις καινουργιο timer με τον χρονο που μενει.

 

Επιπλεον, εχω να σχολιασω οτι το

        if(c_answers < 10){

            timer -= (100/10); //10 δευτερόλεπτα
        }else if(c_answers >= 10 && c_answers < 20){
            timer -= (100/9); //9 δευτερόλεπτα
        }else if(c_answers >= 20 && c_answers < 30){
            timer -= (100/8); //8 δευτερόλεπτα
        }else if(c_answers >= 30 && c_answers < 40){
            timer -= (100/7); //7 δευτερόλεπτα
        }else if(c_answers >= 40 && c_answers < 50){
            timer -= (100/6); //6 δευτερόλεπτα
        }else if(c_answers >= 50){
            timer -= (100/5); //5 δευτερόλεπτα
        }

ειναι απιστευτα ασχημο στο ματι και σημαδι κακογραμμενου κωδικα. 

Δεν εχω συναντησει ποτε περιπτωση που να χρειαζεται πανω απο 2 else if max, αμα χρειαζεται περισσοτερα τοτε κατι κανεις λαθος και θα πρεπει να κοιταξεις να βρεις μια καλυτερη λυση.  

Εδω πολυ απλα μπορεις να πεις 

if  (c_answers >= 50)

            timer -= (100/5); //5 δευτερόλεπτα

else 

            timer -= (100/( 10 - ParseInt(c_answers/10 )));

Επεξ/σία από Papakaliati
Δημοσ. (επεξεργασμένο)

Καταρχάς δεν είναι τόσο εύκολο όσο λες γιατί πολύ απλά εγώ δουλεύω σε javascript+html και το android δουλεύει σε java και πίστεψε με το OnPause όχι απλά δε μου "σκοτώνει" τον timer αλλά συνεχίζει να τρέχει κανονικά το webview από πίσω αν δεν το κάνω clear ακούγονται και οι ήχοι από τις λάθος απαντήσεις (λόγω χρόνου) ενώ είναι κλειστεί η εφαρμογή.

 

Αυτό είναι που θέλω να αποφύγω το να κάνω clear τον timer απλά με javascript και να ξανατρέξω την εφαρμογή μου φαίνεται απλό αλλά δυστυχώς δεν μου αρκεί γιατί δε γίνεται με την OnPause να "πειράξω" κάτι μέσα στον κώδικα που τρέχει το webview. :(

 

Όσο για το if έχεις δίκιο δεν είχα δώσει και πολύ βάση σε αυτό, ευχαριστώ. :)

 

Το έχω έτσι ώστε να τρέχει κάθε φορά από την αρχή η το webview:

@Override
protected void onPause() {
	myWebView.clearCache(true);
	myWebView.clearHistory();
	myWebView.loadUrl("about:blank");
        super.onPause();
}
	
@Override
protected void onResume(){
	myWebView.loadUrl("file:///android_asset/www/index.html");
        super.onResume();
}
	

και δοκίμασα αυτό αλλά φαινόταν σαν να τρέχει παράλληλα και το προηγούμενο webview καθώς ακουγόντουσαν οι ήχοι λάθους λόγω τέλος χρόνου της ερώτησεις αλλά εγώ έβλεπα την κεντρική οθόνη και μόλις πατούσα το back τότε εξαφανιζόταν το συγκεκριμένο μενού και μου εμφάνιζε το μήνυμα λάθους (μάλλον του άλλου webview).

@Override
protected void onPause() {
	myWebView.pauseTimers();
	myWebView.onPause();
        super.onPause();
}
	
@Override
protected void onResume() {
	myWebView.onResume();
	myWebView.resumeTimers();
        super.onResume();
}
	

Όλα τα παραπάνω ίσως σας μπέρδεψαν για αυτό σας ζήτησα αν μπορείτε να δοκιμάσετε πρώτα λίγο την εφαρμογή. Και αν το κάνετε να έχετε κλειστό το wifi ώστε να μη σας βγάζει διαφημίσεις να μη λέτε ότι θέλω να τα αρπάξω (δισεκατομμύρια). :P

Επεξ/σία από rafinos
Δημοσ. (επεξεργασμένο)

Παιδιά έκανα αυτό:

@Override
protected void onPause() {
	myWebView.pauseTimers();
        super.onPause();
}
	
@Override
protected void onResume() {
	myWebView.resumeTimers();
        super.onResume();
}

Και πλεόν όταν πατάω το home button και μετά ξανανοίγω την εφαρμογή συνεχίζει από εκεί που το άφησα :D

Μάλλον δούλεψε :P

 

Στο if που μου έδωσες έχει λάθος το ParseInt στην javascript είναι parseInt. :)

Επεξ/σία από rafinos

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...