2016-10-06 2 views
5

장치 갤러리에서 이미지를 가져 와서 다른 활동에 표시하려고합니다. 내 활동 코드 :다른 활동에 대해 Uri 권한을 부여하십시오.

private void startGallery() { 
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
    intent.addCategory(Intent.CATEGORY_OPENABLE); 
    intent.setType("image/*"); 
    startActivityForResult(intent, REQ_OPEN_GALLERY) 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQ_OPEN_GALLERY && resultCode == Activity.RESULT_OK) { 
     Uri imageUri = data.getData() 
     // here I save image uri to pass to another activity 
    } 
} 

내가 SecurityException을 얻을 다른 활동에 URI를 열어보십시오. Docs은 수신 된 URI에 대한 허가가 수신 된 활동이 끝날 때까지 지속된다고 말합니다. 따라서 필자의 활동이 끝나면 파일을 읽을 수있는 권한이 없습니다.

다른 활동이이 URI로 파일을 열도록 허락하는 몇 가지 방법이 있습니까? 아니면 이미지를 로컬 앱 저장소에 복사하는 것뿐입니까?

UPD : 내 목표는 수신 된 uri를 로컬 db에 저장하고 다른 활동 및 서비스에서이 파일을 읽을 수있게하는 것입니다.

답변

9

다른 uri 권한을 연장 할 수있는 방법이 있습니까?

예. 첫 번째 활동에서 두 번째 활동으로의 Include FLAG_GRANT_READ_URI_PERMISSION when you pass the Uri :

+1

죄송합니다. 제 질문이 충분히 명확하지 않습니다. 내 목표는 수신 된 uri를 로컬 db에 저장하고 다른 활동 및 서비스가이 파일을 읽을 수 있도록 허용하는 것입니다. 업데이트 된 답변 – nnesterov

+1

@nnesterov : "내 목표는 수신 된 URI를 로컬 DB에 저장하는 중입니다."- 작동하지 않습니다. 만약 안드로이드 4.4 이상에서'ACTION_OPEN_DOCUMENT'을 사용한다면'takePersistableUriPermission()'을 사용해 볼 수 있습니다. 제대로 작동한다면'Uri'에 의해 식별 된 내용에 장기간 액세스 할 수 있습니다. 그렇지 않으면 콘텐츠의 로컬 복사본을 만들어야합니다. 이 작업에 대한 데모는 [이 샘플 응용 프로그램] (https://github.com/commonsguy/cw-omnibus/tree/master/Documents/Durable)을 참조하십시오. – CommonsWare

관련 문제