2016-06-28 7 views
2

를로드하지 못했습니다 :안드로이드 암시 적 의도 편집이 장치에서 이미지 편집 응용 프로그램을 호출하는 내 암시 적 의도 이미지

startActivity(new Intent(Intent.ACTION_EDIT).setDataAndType(myUri, 
    getMimeType(myUri)).setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | 
    Intent.FLAG_GRANT_WRITE_URI_PERMISSION)); 

그리고 이것은 내가 getMimeType하는 방법이다 : 일부 앱의

public String getMimeType(Uri uri) { 
    String mimeType = null; 
    if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) { 
     ContentResolver cr = getContentResolver(); 
     mimeType = cr.getType(uri); 
    } else { 
     String fileExtension = MimeTypeMap.getFileExtensionFromUrl(uri 
       .toString()); 
     mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
       fileExtension.toLowerCase()); 
    } 
    return mimeType; 
} 

그 로드가 중단됩니다.

Sketch_Camera의 경우 보이지 않는 페이지 만로드되어 내 앱과의 상호 작용을 사용 중지합니다.

앱에서 AirBrush은 앱을로드하지만 '이미지로드 실패'메시지와 함께 충돌합니다.

광산이 16인데 최소 sdk 버전과 관련이 있습니까? 최소 sdk 버전 9에서도 테스트했으며 결과는 변경되지 않았습니다.

모든 앱에서 작동하려면이 의도에 추가해야 할 것이 있습니까?

내가 너무 putExtra을 시도하고 그것은 도움이되지 않습니다

.putExtra(Intent.ACTION_EDIT, myUri); 

내 장치에서 일부 갤러리 응용 프로그램을했습니다 그들 모두 아무 문제없이 Sketch_CameraAirBrush를 실행합니다.

여기가 어떻게됩니까? 나는이 현상으로 고투하는 2 일 후에 너무 혼란 스럽다.

+1

'myUri'의 값은 무엇입니까?실제 MIME 형식 대신에'image/*'를 사용하는 이유는 무엇입니까 (MIME 형식이 무엇인지 알기에 * 사용자의 * 내용이므로)? – CommonsWare

+0

myUri는 이미지 파일 >> Uri.fromFile (myFile)의 uri이며 실제 MIME 유형 대신 image/*를 사용하는 이유는 무엇입니까? 나는 스택에서 코드를 집어 들었다. 이제 귀하의 가이드에 따라 질문을 편집했습니다. 그러나 여전히 나는 같은 결과를 얻는다. – Eftekhari

+1

"myUri은 이미지 파일의 URI입니다."-이 파일은 어디에 있습니까? 'Intent.FLAG_GRANT_READ_URI_PERMISSION'과'Intent.FLAG_GRANT_WRITE_URI_PERMISSION'는'file''Uri' 값과 관련이 없으므로이 경우 쓸모가 없습니다. – CommonsWare

답변

2

그것의 다른 응용 프로그램이 위치에 대한 권리, 또는 그 을 가지고 있다는 보장은 없습니다

MediaStore.Images.Media.EXTERNAL_CONTENT_URI

를 쿼리하여 하나 개의 미디어 저장소 파일의 경로에서 생성 된 파일
앱에이 위치에 대한 권한이 있습니다. 예를 들어, 이미지는 removable storage 일 수 있습니다. 게다가, the fileUri scheme is being banned for cross-app usage, 어쨌든.

대신 contentUri을 사용하십시오. 예를 들어, this sample app에서 나는 비디오에 대해 MediaStore을 쿼리합니다. Cursor 특정 비디오에 위치 row 이름, 나는 통해의 Uri을 생성 주어진 :

videoUri= 
    ContentUris.withAppendedId(
     MediaStore.Video.Media.EXTERNAL_CONTENT_URI, row.getInt(row.getColumnIndex(MediaStore.Video.Media._ID))); 

Uri 내 자신의 목적 (예를 들면, 피카소에 손 재생 VideoView에 손을 썸네일을 얻을 모두 작품) 및 타사 앱 (예 : ACTION_VIEW 재생 용)으로 전달할 수 있습니다.

Uri을 (MediaStore.Images.Media.EXTERNAL_CONTENT_URI)와 (과) 일치하는 쿼리로 변경하는 것 외에는 동일한 기본 코드가 필요합니다.

또한 Intent에서 깃발을 제거하십시오. 이 코드는 Intent이 자신의 ContentProvider을 가리키고있는 곳이며 원래 코드 또는 withAppendedId()에서 작성한 Uri과 일치하지 않습니다.