2010-08-14 21 views
1

1- Comment désactiver le multi-tâches? Mon application est un jeu basé sur socket, chaque fois que je démarre l'application, il faut d'abord charger la page principale pour démarrer la connexion socket? Je ne veux pas que l'utilisateur puisse exécuter mon application en arrière-plan. Est-ce possible?Android ==> désactiver le multi-tâches?

2- Je ne veux pas que l'utilisateur puisse utiliser le bouton de retour, pour naviguer entre les pages, les utilisateurs doivent seulement utiliser les boutons disponibles dans mon application pour naviguer? Est-ce possible?

+5

Cela ressemble à un mauvais design. Vous devez prendre en charge les boutons matériels, et vous devez récupérer gracieusement d'être poussé en arrière-plan. AFAIK, ce sont des philosophies de conception fondamentales d'Android ... –

+0

ce n'est pas vrai. Vous ne voulez pas garder une prise connectée tout le temps, cela tue la batterie. Et ce n'est pas bon pour une application client/serveur de garder la connexion lorsque l'utilisateur est inactif, c'est juste un gâchis de bande passante, et ralentit le serveur – aryaxt

+1

1. Qu'est-ce que c'est? 2. Si votre application ne fonctionne pas en tant que service. Le socket ne sera pas vivant en arrière-plan. Vous devriez lire sur le cycle de vie d'une application Android. Seul le service continuera à fonctionner en arrière-plan, toutes les autres applications sont en mode "veille". Sauf si je le lis mal. 3. Vous empêchez quelqu'un de regarder dans son navigateur et de revenir au jeu, ou de recevoir un appel et de retourner au jeu ... 4. Vous devriez essayer de gérer la reconnexion/test si le socket est actif. Si vous l'exécutez en tant que service, ajoutez un "délai d'inactivité" et reconnectez-le sur demande. –

Répondre

3

Vous pouvez attraper le bouton de retour (et l'ignorer), mais vous ne pouvez pas bloquer le bouton Accueil.

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{  
    if (keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     return true; 
    } 
    ... 

Rappelez-vous, le téléphone est juste une autre application pour cette conception du système d'exploitation empêche une application escroc de désactiver l'aspect « téléphone » du dispositif.

Si vous voulez éviter l'application de fonctionner en arrière-plan, vous pouvez fermer l'activité à partir de la méthode OnPause():

@Override 
protected void onPause() 
{ 
    super.onPause(); 
    finish(); 
} 

Cela forcera votre application à partir de zéro si elle est mise en arrière-plan pour une raison quelconque. Cela sera probablement appelé lorsque le téléphone est mis en veille, cependant, ce n'est peut-être pas le comportement exact que vous recherchez.

+0

merci beaucoup, bonne réponse. 1 Question: où est-ce que j'écris le deuxième code fourni? Dans chaque activité? – aryaxt

+1

Le code onPause() doit entrer dans toute activité que vous ne voulez pas autoriser à exécuter en arrière-plan. Comme l'a commenté Chinmay Kanchi, vous vous battez contre la philosophie Android, il sera donc très difficile de concevoir votre application de cette façon. Voici une explication plus détaillée de ce que les fonctions du cycle de vie sont appelées quand: http://developer.android.com/guide/topics/fundamentals.html#actlife –

+0

1 chose de plus :), j'ai un service (socket) fonctionnant dans le Contexte. Est-ce que l'appel finish() tue le service aussi? – aryaxt