Намерение камеры Android немедленно возвращается

У меня есть действие, которое позволяет пользователю выбрать предварительный просмотр фотографии, которую они выбирают из галереи или камеры. Проблема, с которой я сталкиваюсь, заключается в том, что намерение камеры/галереи возвращается немедленно, затем показывает камеру/галерею и ничего не возвращает.

Основной поток вещей выглядит следующим образом: Фрагмент -> Подкласс приложения -> Основная активность - (startActivity) -> Активность предварительного просмотра фотографий - (в onCreate) -> Намерение выбора фотографий


//In the application subclass
public static void launchImageSelector()
{
    if(!(topActivity instanceof ImagePreviewActivity))
    {
        Intent i = new Intent(context, ImagePreviewActivity.class);
        topActivity.startActivityForResult(i, kImageSelectorRequestCode);
    }
}

///in ImagePreviewActivity class
@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);

    Intent chooser = createChooserIntent(createCameraIntent());
    chooser.putExtra(Intent.EXTRA_INTENT, createOpenableIntent("image/*"));
    startActivityForResult(chooser, 1);
}

//intent creaters(from android src)
private Intent createChooserIntent(Intent... intents)
{
    Intent chooser = new Intent(Intent.ACTION_CHOOSER);
    chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intents);
    chooser.putExtra(Intent.EXTRA_TITLE, "Choose Photo");
    return chooser;
}

private Intent createOpenableIntent(String type) 
{
    Intent i = new Intent(Intent.ACTION_GET_CONTENT);
//      i.addCategory(Intent.CATEGORY_OPENABLE);
    i.setType(type);
    return i;
}

private Intent createCameraIntent() 
{
    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    File externalDataDir = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_DCIM);
    File cameraDataDir = new File(externalDataDir.getAbsolutePath() +
            File.separator + "browser-photos");
    cameraDataDir.mkdirs();
    String mCameraFilePath = cameraDataDir.getAbsolutePath() + File.separator +
            System.currentTimeMillis() + ".jpg";

    photoFileUri = Uri.fromFile(new File(mCameraFilePath));

    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoFileUri);

    return cameraIntent;
}

Что я здесь делаю неправильно? Что может привести к тому, что Намерение Выбирающего вернется немедленно, но при этом продолжится? Я делаю что-то принципиально неправильно здесь?

Спасибо за помощь!!


person TMacGyver    schedule 30.01.2014    source источник


Ответы (1)


После нескольких часов отладки проблема была в файле манифеста. В Android вы не можете запустить действие для получения результата, если для режима запуска установлено значение singleInstance или singleTop.

Нашел ответ здесь: Android - startActivityForResult немедленно запускает onActivityResult

person TMacGyver    schedule 30.01.2014