2013-08-20 5 views
0

사용자가 버튼을 누를 때 갤러리를 열려고합니다.앱으로 프로그래밍 방식으로 갤러리 열기

Intent resimGaleri = new Intent(); 
resimGaleri.setType("image/*"); 
resimGaleri.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
Main.this.startActivity(resimGaleri); 

그러나, 사용자가 갤러리를 열기 위해 버튼을 누르면이 코드에서, 안드로이드는 '작업 완료'를 요청,하지만 난 그것을 묻지 않고 직접 갤러리를 열려면 : 내가 사용하는 코드는 다음입니다. 나는 다음과 같은 코드로 그 작업을 수행 할 수 있습니다

startActivity(new Intent("com.android.gallery3d")); 

그러나 모든 장치 'com.android.gallery3d'를 사용 여부 있는지 확실하지 않습니다. 가능하거나 다른 방법이 있습니까?

+0

사용자가 특정 갤러리 응용 프로그램을 사용하도록 강제하지 말고 설치 한 '이미지/*'공급자 중에서 선택하도록하십시오. 갤러리 응용 프로그램 이외의 공급자가없는 경우 프롬프트없이 열립니다. –

+0

그러나 우리 프로그램은 사용자가 Android의 기본 갤러리 인 특정 갤러리를 사용하도록해야합니다. – halilkaya

+0

모든 Android 설치에 기본 Android 갤러리가있는 것은 아닙니다. 예를 들어 브랜드 ROM을 생각해보십시오. HTC, Verizon에서 ... Cyanogenmod 설치에 대해 생각해보십시오. 특정 갤러리 앱이 있는지 확인할 수 있습니다. 그렇지 않으면 사용자에게 선택 옵션을 제공합니다. –

답변

2

대부분의 기기에는 com.android.gallery3d가있는 것은 아닙니다. 당신은 활동 유형 목록을 얻기 위해 MIME 유형 image/*를 사용하는 의도 동작 VIEW에 의해 패키지 관리자를 질의 할 수 있습니다. 그런 다음 목록을보고 올바른 것을 찾으십시오.

final Intent i = new Intent(Intent.ACTION_VIEW, null); 
i.setType("image/*"); 
final List<ResolveInfo> apps = packageManager.queryIntentActivities(i, 0); 
if(apps != null) { 
    for(ResolveInfo info : apps) { 
     if(info.resolvePackageName!=null && info.resolvePackageName.contains("gallery3d")) {//Maybe use more strict condition 
      //This is the target you want 
      //startActivity(XXXX); 
      return; 
     } 
    } 
    //Target not found 
    //Start the first match or handle your exception here 
} else { 
//Handle exception 
} 
+0

나는 본다. 당신은 제 2 절을 통해 모범을 보일 수 있습니까? – halilkaya

+0

더미 샘플을 참조 용으로 추가했습니다. – Robin

0

다음 코드를 사용할 수 있습니다 : (테스트 코드에서는 마사지하지 않습니다.)

// select a file 
Intent intent = new Intent(); 
intent.setType("image/*"); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
startActivityForResult(Intent.createChooser(intent, "Select Picture"), 1); 
관련 문제