J'écris une chose de type protection par mot de passe où, fondamentalement, l'application vous invite à créer un geste, le stocke quelque part (c'est là que se trouve le problème) et le récupère plus tard. contre ce que vous entrez comme votre "mot de passe".Enregistrer et récupérer des gestes dans la bibliothèque de gestes
Pour la création de geste, ce que j'ai est la suivante:
public class GestureUnlock extends Activity {
private static final float LENGTH_THRESHOLD = 120.0f;
private Gesture mGesture;
private View mConfirmButton;
private final File mStoreFile = new File(Environment.getExternalStorageDirectory(), "gestures");
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gesture_unlock);
mConfirmButton = findViewById(R.id.confirmButton);
GestureOverlayView overlay = (GestureOverlayView)findViewById(R.id.gestureOverlayView);
overlay.addOnGestureListener(new GesturesProcessor());
}
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (mGesture != null) {
outState.putParcelable("gesture", mGesture);
}
}
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mGesture = savedInstanceState.getParcelable("gesture");
if (mGesture != null) {
final GestureOverlayView overlay =
(GestureOverlayView) findViewById(R.id.gestureOverlayView);
overlay.post(new Runnable() {
public void run() {
overlay.setGesture(mGesture);
}
});
mConfirmButton.setEnabled(true);
}
}
public void confirm(View v) {
if (mGesture != null) {
GestureLibrary store = GestureLibraries.fromFile(mStoreFile);
store.addGesture("Gesture Password", mGesture);
store.save();
setResult(RESULT_OK);
Intent intent = new Intent(this, GestureConfirm.class);
startActivity(intent);
} else {
setResult(RESULT_CANCELED);
}
}
public void clear(View v) {
GestureOverlayView overlay = (GestureOverlayView)findViewById(R.id.gestureOverlayView);
overlay.cancelClearAnimation();
overlay.clear(true);
}
private class GesturesProcessor implements GestureOverlayView.OnGestureListener {
public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) {
mConfirmButton.setEnabled(false);
mGesture = null;
}
public void onGesture(GestureOverlayView overlay, MotionEvent event) {
}
public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) {
mGesture = overlay.getGesture();
if (mGesture.getLength() < LENGTH_THRESHOLD) {
overlay.clear(false);
}
mConfirmButton.setEnabled(true);
}
public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) {
}
}
}
C'est le premier code, le responsable de la création du geste en premier lieu. Choses à noter: la mise en page est une superposition de gestes, deux boutons, l'un réinitialise le geste, l'autre est associé à la méthode de confirmation.
GestureConfirm public class étend l'activité met en œuvre OnGesturePerformedListener {
private final File mStoreFile = new File(Environment.getExternalStorageDirectory(), "gestures");
private GestureLibrary store = GestureLibraries.fromFile(mStoreFile);
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gesture_confirm);
GestureOverlayView gesturesView = (GestureOverlayView) findViewById(R.id.gestureOverlayViewConfirm);
gesturesView.addOnGesturePerformedListener(this);
store.load();
}
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
ArrayList<Prediction> predictions = store.recognize(gesture);
for (Prediction prediction : predictions) {
if (prediction.score > 1.0) {
Toast.makeText(this, prediction.name, Toast.LENGTH_SHORT).show();
}
}
}
}
Voici ce que j'ai le code responsable de la lecture des gestes.
Quel est le problème? Votre geste n'est pas reconnu? Pourquoi 'GestureLibrary' est' store' dans un point et 'gestureLib' dans un autre? Quoi qu'il en soit, essayez aussi d'appeler 'store.load()' – rciovati
Désolé, j'ai essayé différents exemples de code pour le faire descendre, je n'ai pas encore "fait ce code" donc il y a des incohérences de noms de variables. Et le store.load() fonctionne! Genre de. J'ai couru l'Android Dev Sample Gesture Builder et stocké un geste dans ce répertoire; le fait est que le code de reconnaissance reconnaît les gestes du générateur d'échantillons mais pas celui que mon utilisateur a créé; donc il y a encore un problème avec le mécanisme de stockage et je suis confus par ce que cela pourrait être – scibor
La logique semble bonne pour moi. Essayez de poster le code complet de votre essai. – rciovati