Activité en arrière plan
Lasyvegasy
-
Lasyvegasy -
Lasyvegasy -
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?
Je vous remercie par avance.
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:
- Activité en arrière plan
- Youtube en arrière plan - Guide
- Arrière plan - Guide
- Activité instagram - Guide
- Arriere plan pc - Guide
- Arrière-plan messenger vidéo - Guide
3 réponses
Bonjour,
Les
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).
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..
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();
};
});

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(); }; });