2013-06-28 2 views
3

카메라 갤러리 사진을 얻기 위해 다른 활동을 여는 활동이 있습니다. 그림이 원래 활동으로 되돌아 와서 imageView에 놓입니다. 괜찮아. 사용자가 나중에 다시 돌아 오거나 이미지가 사라질 때 이미지를 저장하려면 어떻게해야합니까? 공유 환경 설정을 사용하여 이미지 경로를 가져오고 이미지 자체를 저장하지 않겠다는 것을 알고 있지만 어떻게해야할지 모릅니다.공유 환경 설정을 사용하여 이미지 경로를 저장하는 방법

활동

private ImageView im1; 
private String selectedImagePath; 
private static final int SELECT_PICTURE = 1; 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
    if (requestCode == SELECT_PICTURE) { 
    Uri selectedImageUri = data.getData(); 
    selectedImagePath = getPath(selectedImageUri); 
    System.out.println("Image Path : " + selectedImagePath); 
    im1.setImageURI(selectedImageUri); 
    }}} 
public String getPath(Uri uri) { 
    String[] projection = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = managedQuery(uri, projection, null, null, null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
    }; 
    ((Button)dialogView.findViewById(R.id.button3)) 
    .setOnClickListener(new OnClickListener() { 
public void onClick(View arg0) { 
    Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PICTURE); 
    }}); 

활동 B

Button send = (Button) findViewById(R.id.send); 
    send.setOnClickListener(new OnClickListener() { 
public void onClick(View v) {    
      Intent intent=new Intent(); 
      setResult(RESULT_OK, intent); 
      Bundle bundle=new Bundle(); 
      bundle.putInt("image",R.id.showImg); 
      intent.putExtras(bundle); 
      finish(); 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == RESULT_OK) { 
     if (requestCode == SELECT_PICTURE) { 
      Uri selectedImageUri = data.getData(); 
      selectedImagePath = getPath(selectedImageUri); 
      System.out.println("Image Path : " + selectedImagePath); 
      img.setImageURI(selectedImageUri); 
     }}} 

public String getPath(Uri uri) { 
    String[] projection = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = managedQuery(uri, projection, null, null, null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
    } 

답변

4

오버라이드에게 Activity에서 onPause() 방법을 저장하려면 (라이프 사이클을 확인, 왜 onPause을 이해하기 활동 다이어그램은 여기에서 : http://developer.android.com/reference/android/app/Activity.html) like thi 들 :

@Override 
protected void onPause() { 
    SharedPrefrences sp = getSharedPreferences("AppSharedPref", 0); // Open SharedPreferences with name AppSharedPref 
    Editor editor = sp.edit(); 
    editor.putString("ImagePath", selectedImagePath); // Store selectedImagePath with key "ImagePath". This key will be then used to retrieve data.   
    editor.commit(); 
    super.onPause(); 
} 

그것은이 Activity 배경으로 될 때마다, 이미지 경로 이름 AppSharedPref으로 SharedPreferences에 저장된다는 것을 의미합니다 -이 이름은 당신이 원하는대로 할 수 있지만, 데이터를 검색 할 때 동일한 하나를 사용합니다 .

다음 Activity 전경에 올 때 이미지 경로를 검색 할 수 있도록 같은 ActivityonResume() 메소드를 오버라이드 (override) :

또한 그림에 따라 예를 onStart()에 대한 같은 최우선 다른 방법으로 플레이 할 수 있습니다
@Override 
protected void onResume() { 
    SharedPreferences sp = getSharedPreferences("AppSharedPref", 0); 
    selectedImagePath = settings.getString("ImagePath", ""); 
    super.onResume(); 
} 

하지만 이건 내가 너 한테 맡긴다.

+0

이 코드를 구현하려고했지만 잘못된 장소에 넣어야합니다. OnPause가 발생하지 않고 OnResume 섹션이 onActivityResult 섹션 바로 다음으로 이동합니까? – SmulianJulian

+0

실제로이 위치에 상관없이 'Activity' 내부에 있어야합니다. 예,'onActivityResult()'뒤에 올 수 있습니다. 그게 뭐가 잘못 됐니? –

+0

내가 올바른 방법을 알기 때문에이 질문에 답을 표시했습니다. 나는 네가 나에게 준 것을 사용하여 또 다른 질문을 올렸다. 아직도 저장할 수 없습니다. 어쩌면 도움을 줄 수 있습니다. http://stackoverflow.com/questions/17358820/how-to-save-multiple-images-to-imageview-using-shared-preferences – SmulianJulian

1

당신은 또 다른 하나 개의 활동에서 의도를 전달에서 "selectedImagePath"를 사용할 수 있습니다. A.

활동에

의도 새로운 = 의도 텐트 (이, Activity.class); intent.putExtra ("imagePath", selectedImagePath); .

및 활동 B에서 그것을 얻을,

문자열 strImagePath = getIntent() getExtras()에는 getString ("IMAGEPATH.");

1
String imagePath = ... ; 

SharedPrefrences prefs = getSharedPreferences("application_settings", 0); 
Editor editor = prefs.edit(); 
editor.putString("image_path", imagePath);    
editor.commit(); 
1
SharedPreferences prefs = this.getSharedPreferences(
    "com.example.app", Context.MODE_PRIVATE); 

읽으려면 환경 설정 :

String path = prefs.getString("key", default value); 

편집하고 이미지와 환경

prefs.edit().putString("key", value).commit();