0

ギャラリーから画像を読み込んでトリミングする関数を使用していますが、loadfromgallery機能しない場合があります。

SDカードのないデバイスでは機能しないようです(さまざまなデバイスでテストしました。i9000+ CM10.1 +セマフォでは常に機能しますが、Android> 4.0のタブレットでは機能しません)

誰かが私を助けることができますか?

これが私のonActivityResult方法です:

protected void onActivityResult(int requestCode, int resultCode,Intent imageReturnedIntent) {
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
    switch (requestCode) {
    case REQ_CODE_PICK_IMAGE:
        if (resultCode == RESULT_OK) {  
            if (imageReturnedIntent!=null){
                getTempFile();
                String filePath= Environment.getExternalStorageDirectory()+ "/temp/"+TEMP_PHOTO_FILE;
                System.out.println("path "+filePath);
                Bitmap selectedImage =  BitmapFactory.decodeFile(filePath);
                bitmapdrawable = new BitmapDrawable(selectedImage);
                generator_imagen.setImageDrawable(bitmapdrawable);
                app_gestorVistas("GENERATE");
                app_posicionGrid=9999;
            }
        }
    }} 

これは機能です:

public void loadfromgallery(){  //TODO LOAD FROM GALLERY
    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    photoPickerIntent.setType("image/*");
    photoPickerIntent.putExtra("crop", "true");
    photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri());
    photoPickerIntent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
    startActivityForResult(photoPickerIntent, REQ_CODE_PICK_IMAGE);
}
private Uri getTempUri() {
    return Uri.fromFile(getTempFile());
}

private File getTempFile() {
    if (isSDCARDMounted()) {
        File f = new File(Environment.getExternalStorageDirectory(),"/temp/"+TEMP_PHOTO_FILE);

        try {f.createNewFile();}
        catch (IOException e) {}
        return f;
    } else {
        return null;
    }
}

private boolean isSDCARDMounted(){
    String status = Environment.getExternalStorageState();
    if (status.equals(Environment.MEDIA_MOUNTED))
        return true;
    return false;
}



private static final String TEMP_PHOTO_FILE = "mprt_img.jpg";

これは私のフィルタリングされたlogcatです(ライフサイクル)

   01-27 13:34:29.476: V/EVENTO(4630): STATE:  onCreate
01-27 13:34:36.261: V/EVENTO(4630): STATE:  onStart
---APP BUSY--
01-27 13:34:47.296: V/EVENTO(4630): STATE:  onStop
--STOP APP AN DSHOW IMAGEPICKER---
01-27 13:35:01.316: V/EVENTO(4630): STATE:  onRestart
01-27 13:35:01.332: V/EVENTO(4630): STATE:  onStart
4

1 に答える 1

0

logcatの出力を投稿できますか?

あなたのTEMP_PHOTO_FILEは何ですか?あなたの主な活動のライフサイクルは何ですか?イメージピッカーから戻ったときに、onCreateが再度呼び出されますか?その場合、一時変数はすべて失われるため、バンドルに保存する必要があります。

    @Override
public void onSaveInstanceState(Bundle outState) {
  super.onSaveInstanceState(outState);
  if (filesaved == null) {
    outState.putString("file-uri", "");
  }
  else {
    outState.putString("file-uri", filesaved.toString());
  }
};

もう1つの問題は、ファイルの作成である可能性があります。フォルダが存在することを確認してください!

File sdCard = Environment.getExternalStorageDirectory();

File dir = new File (sdcard.getAbsolutePath() + "/temp/");

dir.mkdirs();

File file = new File(dir, TEMP_PHOTO_FILE);

...

FileOutputStream f = new FileOutputStream(file);
于 2013-01-27T12:00:29.723 に答える