Activité en arrière plan

Fermé
Lasyvegasy - Modifié le 4 avril 2018 à 09:13
 Lasyvegasy - 4 avril 2018 à 14:43
Bonjour,

Je suis actuellement entrain de créer une application permettant de résoudre une grille de sudoku par l'intermédiaire de la caméra du smartphone. J'ai donc pour cela créé un programme permettant de récupérer les chiffres inscrits dans chaque cases cependant l'application s'arrête a chaque et tourne pas.. D'après quelques recherches je dois lancer une partie de mon programme en arrière plan avec AsyncTask cependant j'ai du mal à l'adapter..
Pourriez vous m'aidez à avancer svp?

        btnProcess.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TextRecognizer textRecognizer=new TextRecognizer.Builder(getApplicationContext()).build();
                if(!textRecognizer.isOperational()){
                    Log.e("Error","Detector not available");
                }
                else{
                    int largeur= (bitmap.getWidth())/9;
                    int hauteur= (bitmap.getHeight())/9;
                    Bitmap cellule = null;
                    StringBuilder stringBuilder=new StringBuilder();
                    for (int i=0;i<9;i++ ){
                        for(int z=0;i<9;z++){
                            if(z==0){
                                 cellule=Bitmap.createBitmap(bitmap,i*largeur,0,largeur,hauteur);
                            }
                            if(0<z){
                                 cellule=Bitmap.createBitmap(bitmap,i*largeur,z*hauteur,largeur,hauteur);
                            }
                            Frame frame=new Frame.Builder().setBitmap(cellule).build();
                            SparseArray<TextBlock> items =textRecognizer.detect(frame);
                            TextBlock item=items.valueAt(0);
                            stringBuilder.append(item.getValue()+" ");
                            cellule.recycle();

                        }
                        stringBuilder.append("\n");
                    }
                    txtResult.setText(stringBuilder.toString());
                    }
                }
        });


Je vous remercie par avance.


A voir également:

3 réponses

BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894
Modifié le 4 avril 2018 à 09:14
Bonjour,

Les
AsyncTasks
, c'est un peu dépassé..Regardes du côté des threads car, effectivement, il faut éviter de faire de gros traitements sur le thread principal (UI thread).

0
Bonjour, j'essayé avec les threads mais toujours le même problème.. L'application s'arrête et se ferme quand je lance l'application.

btnProcess.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View v) {
                new Thread(new Runnable() {
                    public void run() {
                        final StringBuilder stringBuilder = new StringBuilder();
                        TextRecognizer textRecognizer=new TextRecognizer.Builder(getApplicationContext()).build();
                        if(!textRecognizer.isOperational()){
                            Log.e("Error","Detector not available");
                        }
                        else {
                            int largeur = (bitmap.getWidth()) / 9;
                            int hauteur = (bitmap.getHeight()) / 9;
                            Bitmap cellule = null;
                            for (int i = 0; i < 9; i++) {
                                for (int z = 0; i < 9; z++) {
                                    if (z == 0) {
                                        cellule = Bitmap.createBitmap(bitmap, i * largeur, 0, largeur, hauteur);
                                    }
                                    if (0 < z) {
                                        cellule = Bitmap.createBitmap(bitmap, i * largeur, z * hauteur, largeur, hauteur);
                                    }
                                    Frame frame = new Frame.Builder().setBitmap(cellule).build();
                                    SparseArray<TextBlock> items = textRecognizer.detect(frame);
                                    TextBlock item = items.valueAt(0);
                                    stringBuilder.append(item.getValue() + " ");
                                    cellule.recycle();

                                }
                                stringBuilder.append("\n");
                            }
                        }
                        runOnUiThread(new Runnable() {
                            public void run() {
                                txtResult.setText(stringBuilder.toString());
                            }
                        });
                    }
                }).start();

            };
        });
0
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894
4 avril 2018 à 11:39
As-tu regardé les logs? Quel est le message d'erreur? L'exception?
0
j'ai le message d'erreur "Application has stopped" mais apres je pense que c'est par rapport à mes coordonnées pour délimiter les cases.
0
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894
4 avril 2018 à 12:05
Je te parle des logs que tu as dans la console d'Android Studio...
ça peut effectivement être lié à tes coordonnées mais dans ce cas, on est hors sujet
0
J'ai modifié le code du coup j'ai plus de message d'erreur cependant ma détection de texte n'est pas efficace..

Il me retourne une grille rempli de zéro..

btnProcess.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View v) {
                new Thread(new Runnable() {
                    public void run() {
                        final StringBuilder stringBuilder = new StringBuilder();
                        TextRecognizer textRecognizer=new TextRecognizer.Builder(getApplicationContext()).build();
                        if(!textRecognizer.isOperational()){
                            Log.e("Error","Detector not available");
                        }
                        else {
                            int largeur = (bitmap.getWidth()) / 9;
                            int hauteur = (bitmap.getHeight()) / 9;
                            Bitmap cellule = null;
                            for (int y = 0; y< 9; y++) {
                                for (int x = 0; x < 9; x++) {
                                    if (y == 0) {
                                        cellule = Bitmap.createBitmap(bitmap,x*largeur,0,largeur,hauteur);
                                    }
                                    if (0 < y ) {
                                        cellule = Bitmap.createBitmap(bitmap,x*largeur,y*hauteur,largeur,hauteur);
                                    }
                                    Frame frame = new Frame.Builder().setBitmap(cellule).build();
                                    cellule.recycle();
                                    SparseArray<TextBlock> items = textRecognizer.detect(frame);
                                    if (items.size()==0){
                                        stringBuilder.append("0" + " ");
                                    }
                                    else{
                                        TextBlock item=items.valueAt(0);
                                        stringBuilder.append(item.getValue() + " ");
                                    }

                                }
                                stringBuilder.append("\n");
                            }
                        }
                        runOnUiThread(new Runnable() {
                            public void run() {
                                txtResult.setText(stringBuilder.toString());
                            }
                        });
                    }
                }).start();

            };
        });
0
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894
4 avril 2018 à 14:21
Déroules le code en pas-à-pas pour voir le souci
0
Y'a moyen de lancer le code pas à pas avec Android Studio?
0
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894
4 avril 2018 à 14:37
0
Merci!
0