Ich versuche das mit dem Foto hinzubekommen. Habe aus SOF eine Helfer Methode genommen, die den Filename rausliest aus der URI. Dieser Name wird danach in der onActivityResult gesetzt.
Leider kann ich nur einmal machen problemlos und dann stürzt die App nach dem 2. Foto ab. Einmal konnte ich zwei machen.
Hier der Code:
und das mit dem Registrations Teil:
Die Deklaration:
Der Abbruch Fehler:
Leider konnte ich aus dem level:error nicht schlau werden, da die keine Zeile makiert haben.
Wer kennt sich mit dem Prozess au?
Für jede Hilfe bin ich dankbar!
Leider kann ich nur einmal machen problemlos und dann stürzt die App nach dem 2. Foto ab. Einmal konnte ich zwei machen.
Hier der Code:
Java:
private void Personal_Vorder_Kamera(){
if(!checkPermission()){
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, Kamera_Code);
}else if(checkPermission()){
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, "Personalausweiß Vorderseite");
values.put(MediaStore.Images.Media.DESCRIPTION, "Für die Bestätigung der Person.");
persovorURI = getActivity().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
camera.putExtra(MediaStore.EXTRA_OUTPUT, persovorURI);
try {
persoVorBitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), persovorURI);
} catch (IOException e) {
e.printStackTrace();
}
startActivityForResult(camera, PersonalVorResult); }
}
private void Personal_Rück_Kamera(){
if(!checkPermission()){
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, Kamera_Code);
}else if(checkPermission()){
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, "Personalausweiß Rückseite");
values.put(MediaStore.Images.Media.DESCRIPTION, "Für die Bestätigung der Person.");
persorückURI = getActivity().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
camera.putExtra(MediaStore.EXTRA_OUTPUT, persorückURI);
try {
persoRückBitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), persorückURI);
} catch (IOException e) {
e.printStackTrace();
}
startActivityForResult(camera, PersonalRückResult); }
}
private void Gewerbe_Kamera(){
if(!checkPermission()){
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, Kamera_Code);
}else if(checkPermission()){
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, "Gewerbeschein");
values.put(MediaStore.Images.Media.DESCRIPTION, "Für die Bestätigung des Unternehmens.");
gewerbescheinURI = getActivity().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
camera.putExtra(MediaStore.EXTRA_OUTPUT, gewerbescheinURI);
try {
gewerbescheinBitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), gewerbescheinURI);
} catch (IOException e) {
e.printStackTrace();
}
startActivityForResult(camera, GewerbeResult);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == GewerbeResult){
if(resultCode == RESULT_OK){
String path = getRealPathFromURI(gewerbescheinURI);
filenameGewerbe = path.substring(path.lastIndexOf("/")+1);
gewerbe_filename.setText(filenameGewerbe);
}else{
Toast.makeText(getActivity(), "Kein Foto gemacht", Toast.LENGTH_SHORT).show();
}
}else if (requestCode == PersonalVorResult){
String path = getRealPathFromURI(persovorURI);
filenamePersoVorder = path.substring(path.lastIndexOf("/")+1);
persovor_filename.setText(filenamePersoVorder);
}else if(requestCode == PersonalRückResult){
if(resultCode == RESULT_OK){
String path = getRealPathFromURI(persorückURI);
filenamePersoRück = path.substring(path.lastIndexOf("/")+1);
perosrück_filename.setText(filenamePersoRück);
}else{
Toast.makeText(getActivity(), "Kein Foto gemacht", Toast.LENGTH_SHORT).show();
}
}
}
private String getRealPathFromURI(Uri contentUri) {
// can post image
String [] proj={MediaStore.Images.Media.DATA};
Cursor cursor = getActivity().managedQuery( contentUri,
proj, // Which columns to return
null, // WHERE clause; which rows to return (all rows)
null, // WHERE clause selection arguments (none)
null); // Order-by clause (ascending by name)
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String res = cursor.getString(column_index);
cursor.close();
return res;
}
private Boolean checkPermission(){
int permission = ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA);
return permission == PackageManager.PERMISSION_GRANTED;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == Kamera_Code) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getActivity(), "camera permission granted", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getActivity(), "camera permission denied", Toast.LENGTH_LONG).show();
}
}
}
und das mit dem Registrations Teil:
Java:
if (filenamePersoVorder == ""){
p_v.setError("Bitte machen Sie ein Foto");
p_v.requestFocus();
correctFilledOut = false;
}else{
p_v.setError(null);
}
if (filenamePersoRück == ""){
p_r.setError("Bitte machen Sie ein Foto");
p_r.requestFocus();
correctFilledOut = false;
}else{
p_r.setError(null);
}
Die Deklaration:
Java:
persovor_filename = (TextView)view.findViewById(R.id.dev_free_dokumente_privat_peronalausweiß_vorderseite_TextView);
perosrück_filename = (TextView)view.findViewById(R.id.dev_free_dokumente_privat_peronalausweiß_rückseite_TextView);
Der Abbruch Fehler:
Code:
android.database.StaleDataException: Attempted to access a cursor after it has been closed.
at android.database.BulkCursorToCursorAdaptor.throwIfCursorIsClosed(BulkCursorToCursorAdaptor.java:63)
at android.database.BulkCursorToCursorAdaptor.requery(BulkCursorToCursorAdaptor.java:132)
at android.database.CursorWrapper.requery(CursorWrapper.java:232)
at android.app.Activity.performRestart(Activity.java:8384)
at android.app.ActivityThread.performRestartActivity(ActivityThread.java:5866)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:244)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8751)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
Leider konnte ich aus dem level:error nicht schlau werden, da die keine Zeile makiert haben.
Wer kennt sich mit dem Prozess au?
Für jede Hilfe bin ich dankbar!