1

Я работаю над приложением, которое использует пользовательскую камеру (с Surfaceview и т. Д.), Я использую startActivityForResult из своей ObjectActivity, чтобы перейти к активности с камерой с именем CameraActivity. Это происходит в этом методе.startActivityForResult возвращает к неправильному действию

public void addPicture(View v) { 
    final CharSequence[] items = { "Take Photo", "Choose from Gallery", "Cancel" }; 
    AlertDialog.Builder builder = new AlertDialog.Builder(ObjectActivity.this); 
    builder.setTitle("Add Photo!"); 
    builder.setItems(items, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int item) { 
      if (items[item].equals("Take Photo")) { 
       executeOnResume = false; 
       if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { 
        int hasWriteExternalStoragePermission = checkSelfPermission(Manifest.permission.CAMERA); 
        if (hasWriteExternalStoragePermission != PackageManager.PERMISSION_GRANTED) { 
         requestPermissions(new String[]{Manifest.permission.CAMERA}, 
           REQUEST_CODE_ASK_PERMISSIONS); 
        } 
       } 
       Intent intent = new Intent(ObjectActivity.this,CameraActivity.class); 
       startActivityForResult(intent, REQUEST_CAMERA); 
      } else if (items[item].equals("Choose from Gallery")) { 
       executeOnResume = false; 
       Intent intent = new Intent(
         Intent.ACTION_PICK, 
         android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       intent.setType("image/*"); 
       startActivityForResult(
         Intent.createChooser(intent, "Select File"), 
         REQUEST_SELECT_FILE); 
      } else if (items[item].equals("Cancel")) { 
       dialog.dismiss(); 
      } 
     } 
    }); 
    builder.show(); 
} 

Чтобы быть более точным, это происходит в этих строках:

Intent intent = new Intent(ObjectActivity.this,CameraActivity.class); 
startActivityForResult(intent, REQUEST_CAMERA); 

Это работает довольно хорошо, но когда я пытаюсь вернуться к ObjectActivity после съемки, которое происходит здесь:

Camera.PictureCallback mPicture = new Camera.PictureCallback() { 
    @Override 
    public void onPictureTaken(byte[] data, Camera camera) { 
     //TODO Code to process picture taken 
     //create a new intent... 
     Intent intent = new Intent(); 
     intent.putExtra("data",data); 
     //close this Activity... 
     setResult(Activity.RESULT_OK, intent); 
     finish(); 
    } 
}; 

Он возвращается к активности, предшествующей ObjectActivity с именем MainActivity, в то время как он должен вернуться к ObjectActivity и вызвать onActivityResult():

@Override 
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { 
    executeOnResume = false; 
    loadStuff(); 
    if (resultCode == RESULT_OK) { 
     if (requestCode == REQUEST_CAMERA || requestCode == REQUEST_SELECT_FILE) { 
      AlertDialog.Builder alertDialog = new AlertDialog.Builder(this); 
      alertDialog.setTitle("Description"); 
      alertDialog.setMessage("Enter Description"); 
      final EditText input = new EditText(this); 
      alertDialog.setView(input); 
      LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT, 
        LinearLayout.LayoutParams.MATCH_PARENT); 
      input.setLayoutParams(lp); 
      alertDialog.setView(input); 
      alertDialog.setPositiveButton("Ok", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 
          description = input.getText().toString(); 
          if (description == null || description.equals("")) { 
           description = "-"; 
          } 
          try { 
           savePhoto(requestCode,data); 
          } catch (IOException e) { 
           e.printStackTrace(); 
          } 
         } 
        }); 
      final AlertDialog.Builder tmpDialog = alertDialog; 

      final AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this); 
      dlgAlert.setTitle("Direction"); 
      dlgAlert.setMessage("Stand with your phone facing the same direction as the picture made and press Ok"); 
      dlgAlert.setPositiveButton("Ok", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 
          mBearingProvider.updateBearing(); 
          bearing = mBearingProvider.getBearing(); 
          cardinalDirection = bearingToString(bearing); 
          Log.e("Direction", cardinalDirection + "," + bearing); 
          tmpDialog.create().show(); 
          dialog.dismiss(); 
         } 
        }); 
      dlgAlert.setNegativeButton("Cancel", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 
          tmpDialog.create().show(); 
         } 
        }); 
      dlgAlert.create().show(); 
     } 
    } 
} 

Но он так и не дошел. Кто-нибудь знает, почему это происходит?

+0

Используете ли вы GroupActivity? – Dinash

+0

ObjectActivity и CameraActivity являются регулярными действиями, а MainActivity - AppCompatActivity, поэтому насколько я знаю, я не использую GroupActivity –

ответ

0

Я нашел решение, если я не посылаю через байт [] с Intent (но вместо того, чтобы, возможно, выписывать файл и отправить путь к этому файлу с Intent), код, похоже, работает и открывается ObjectActivity.

часть, что я удалил/изменено:

intent.putExtra("data",data); 

Я не знаю, почему это работает, я хотел бы знать, почему, но сейчас я счастлив, что это работает.

1

Избавьтесь от этого getParent. Вы хотите установить результат для текущей активности, а не для своего родителя. Так заменить:

//close this Activity... 
    if (getParent() == null) { 
     setResult(Activity.RESULT_OK, intent); 
    } else { 
     getParent().setResult(Activity.RESULT_OK, intent); 
    } 

с

setResult(Activity.RESULT_OK, intent); 
+0

Я думаю, что я уже пробовал это, но я дам ему еще один go –

+2

Установка результата родителя абсолютно 100% неправильно. –

+0

Это может быть правдой, но это не решение, я получаю одинаковые результаты –