Android 용 간단한 이미지 갤러리 앱을 만들고 있습니다. 사용자가 SMS, 이메일, 채팅 애플리케이션에 이미지를 추가하고 싶을 때 이미지를 선택할 수 있기를 원합니다. 앱 선택기 메뉴에 내 앱을 표시하기 위해 의도 필터를 사용했습니다. 사용자가 이미지를 추가하려고합니다.
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.OPENABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
<data android:mimeType="vnd.android.cursor.dir/image" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
<data android:mimeType="vnd.android.cursor.dir/image" />
</intent-filter>
<intent-filter>
<action android:name="android.media.action.IMAGE_CAPTURE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
그러면 사용자가 이미지를 선택할 수 있지만 발신자 앱에 응답하는 가장 좋은 방법을 찾고 있습니다.
이미지를 임시 파일로 저장하고 해당 파일의 URI를 보내려고했습니다.
public void respondWithImage(Bitmap bitmap){
try {
//If needed create temp folder
File folder = new File(Environment.getExternalStorageDirectory() + "/temp/");
if (!folder.exists()) {
folder.mkdirs();
}
File nomediaFile = new File(folder, ".nomedia");
if (!nomediaFile.exists()) {
nomediaFile.createNewFile();
}
//Create temp image file
FileOutputStream out = new FileOutputStream(
Environment.getExternalStorageDirectory()
+ "/temp/temp.png");
bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
File bitmapFile = new File(
Environment.getExternalStorageDirectory()
+ "/temp/temp.png");
//Tell parent activity to respond with the image
if (bitmapFile.exists()) {
Intent localIntent = new Intent().setData(Uri
.fromFile(bitmapFile));
parentActivity.setResult(Activity.RESULT_OK, localIntent);
} else {
parentActivity.setResult(Activity.RESULT_CANCELED);
}
parentActivity.finish();
} catch (Exception e) {
e.printStackTrace();
Log.d("error", "Error writing data");
}
}
이것은 작동하지만 전화에 sdcard가 없으면 어떻게 될지 궁금합니다. 자체 메모리를 내선 카드로 간주하는 GS3가 있기 때문에 해당 옵션을 시도 할 수 없습니다. (내가 틀리면 수정하세요)
또한 내 앱 내에서 드로어 블 리소스 (PNG 파일)를 가리키는 URI를 다시 보내려고 시도했지만 ( 앱 리소스에 이미지가있는 경우 문제가되지 않음) 호출 앱 (MMS) 충돌이 발생합니다. 디버거에서 오류가 발생하지 않습니다.
이를 수행하는 올바른 방법은 무엇입니까?
이것은 작동하지만 전화에 sdcard가 없으면 어떻게 될지 궁금합니다.
"sdcard"를 사용하고 있지 않습니다.
자체 메모리를 내선 카드로 간주하는 GS3가 있기 때문에 해당 옵션을 시도 할 수 없습니다. (내가 틀리면 수정하세요)
외부 저장소는 일반적으로 온보드 플래시이며 일반적으로 내부 저장소가있는 동일한 파티션에 있습니다. 하지만 외부 저장 장치에 대한 설명서가 잘되지 않습니다, 당신은 그것을 검토 할 수 있습니다.
또한 내 앱 내에서 드로어 블 리소스 (PNG 파일)를 가리키는 URI를 다시 보내려고 시도했지만 호출 앱 (MMS)이 중단되고 디버거에서 오류가 발생하지 않습니다.
타사 앱이 아닌 앱을 디버깅 할 때 디버거의 일부 타사 앱에서 충돌이 발생하지 않습니다. 하지만 LogCat에는 스택 추적이 포함될 수 있습니다.
이를 수행하는 올바른 방법은 무엇입니까?
FileProvider
, 또는 아마도 my를 StreamProvider
사용ContentProvider
하여 이미지 를 제공하기 위해를 제공하십시오. 귀하는 Uri
다음이 될 것입니다 content://
Uri
. 이미지는 일반적으로 콘텐츠 제공 업체 (예 : 이메일 첨부 파일)에서 제공되므로 대부분의 앱에서 지원되어야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다