B
brucke
Neues Mitglied
- 0
Hallo Leute,
ich hab schon einiges hier im Forum gelernt, allerdings habe ich jetzt ein sehr komisches Problem. Die Suche habe ich schon versucht, allerdings weis ich nicht einmal genau wonach ich suchen soll.
Kurz zum Problem:
Ich habe eine Leiste mit 4 Buttons [Männlich, Weiblich, Kamera, Filesystem]
Mit diesen 4 Buttons kann der Benutzer sein Profilbild festlegen. Weiblich und Männlich sind "Dummy-Icons".
Filesystem funktioniert ohne Probleme.
Bei der Kamer habe ich das Problem, dass ich nach dem ich das Ergebnis erhalten habe, das ich in das Textfeld darüber nichts mehr eingeben kann. Es blinkt der Courser und die Tastatur geht auf, allerdings erscheint die Eingabe nicht, und es wird auch nichts "versteckt" eingeben. Ohne Crop-Intent funktioniert es.
Könnt ihr mir einen Tipp geben, wo ich das suchen Anfangen soll? Oder hatte jemand schon mal ein ähnliches Problem? Sollte der Code nicht ausreichen, sagt kurz bescheid, dann poste ich die noch benötigten Stellen.
Vielen Dank schon mal.
Kurz zum Programm ablauf:
Ich starte ein Kamera Intent
Ich fange das Ergebnis ab:
setzte das Ergebis und starte ein neues Intent um das Bild zurechtzuschneiden:
Anzeigen des Ergebnisses:
ich hab schon einiges hier im Forum gelernt, allerdings habe ich jetzt ein sehr komisches Problem. Die Suche habe ich schon versucht, allerdings weis ich nicht einmal genau wonach ich suchen soll.
Kurz zum Problem:
Ich habe eine Leiste mit 4 Buttons [Männlich, Weiblich, Kamera, Filesystem]
Mit diesen 4 Buttons kann der Benutzer sein Profilbild festlegen. Weiblich und Männlich sind "Dummy-Icons".
Filesystem funktioniert ohne Probleme.
Bei der Kamer habe ich das Problem, dass ich nach dem ich das Ergebnis erhalten habe, das ich in das Textfeld darüber nichts mehr eingeben kann. Es blinkt der Courser und die Tastatur geht auf, allerdings erscheint die Eingabe nicht, und es wird auch nichts "versteckt" eingeben. Ohne Crop-Intent funktioniert es.
Könnt ihr mir einen Tipp geben, wo ich das suchen Anfangen soll? Oder hatte jemand schon mal ein ähnliches Problem? Sollte der Code nicht ausreichen, sagt kurz bescheid, dann poste ich die noch benötigten Stellen.
Vielen Dank schon mal.
Kurz zum Programm ablauf:
Ich starte ein Kamera Intent
Code:
private void setIconFromCamera() {
// FIXME workaround für Eingabeproblem
if (mTxtProfileName.getText().length() == 0) {
Toast.makeText(getActivity(), getString(R.string.please_type_a_profile_name), Toast.LENGTH_SHORT).show();
} else {
Intent intent = mIconManager.getCameraChooserIntent();
startActivity(intent, ProfileIconManager.TAKE_FROM_CAMERA);
}
}
private void startActivity(Intent activity, int reqeustCode) {
try {
startActivityForResult(activity, reqeustCode);
} catch (ActivityNotFoundException e) {
Log.d(TAG, e.getLocalizedMessage(), e);
Toast.makeText(getActivity(), "ActivityNotFound: " + e.getLocalizedMessage(), Toast.LENGTH_LONG).show();
}
}
public Intent getCameraChooserIntent() {
// createOutFile();
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFile);
intent.putExtra("return-data", true);
return intent;
}
private void createOutFile() {
File file = new File(Environment.getExternalStorageDirectory(), "temp_icon" + "." + SUFFIXE_FILE);
try {
if (file == null || !file.exists()) {
file.createNewFile();
} else {
file.delete();
file.createNewFile();
}
} catch (IOException e) {
Log.e(TAG, e.getMessage(), e);
}
outputFile = Uri.fromFile(file);
Log.d(TAG, "generated file: " + outputFile);
}
Ich fange das Ergebnis ab:
Code:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case ProfileIconManager.TAKE_FROM_CAMERA:
setIcon(data);
// FIXME wird erst ein Bild gemacht, kann anschließend kein
// Benutzername eingegeben werden!
startActivity(mIconManager.getCropIntent(), ProfileIconManager.CROP_IMAGE);
break;
case ProfileIconManager.TAKE_FROM_FILESYSTEM:
setIcon(data);
break;
case ProfileIconManager.CROP_IMAGE:
setIcon(data);
break;
default:
super.onActivityResult(requestCode, resultCode, data);
}
} else {
Log.w(TAG, "ResultCode not OK: " + resultCode);
}
}
setzte das Ergebis und starte ein neues Intent um das Bild zurechtzuschneiden:
Code:
public Intent getCropIntent() {
// call the standard crop action intent (the user device may not
// support it)
Intent cropIntent = new Intent("com.android.camera.action.CROP");
// indicate image type and Uri
cropIntent.setDataAndType(outputFile, "image/*");
// set crop properties
cropIntent.putExtra("crop", "true");
cropIntent.putExtra("aspectX", aspectX);
cropIntent.putExtra("aspectY", aspectY);
cropIntent.putExtra("outputX", outputX);
cropIntent.putExtra("outputY", outputY);
cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFile);
cropIntent.putExtra("return-data", true);
return cropIntent;
}
Anzeigen des Ergebnisses:
Code:
private boolean setIconFromData(Intent data) {
Log.d(TAG, "setIconFromData");
if (data != null && data.getExtras() != null) {
Bitmap photo = data.getExtras().getParcelable("data");
mImgIconUndefined.setImageBitmap(photo);
mTxtProfileName.requestFocus();
return true;
} else
return false;
}
private void setIcon(Intent data) {
if (data != null && data.getExtras() != null) {
setIconFromData(data);
} else {
setIconFromPath();
}
}
private void setIconFromPath() {
Log.d(TAG, "setIconFromPath");
mImgIconUndefined.setImageURI(mIconManager.getOutputFile());
}