2014-01-06 7 views
4

특정 MIME 유형에 기본 앱을 설정해야합니다. 나는 기본값을 지우는 법을 알고 있지만, 실제로 앱을 열지 않고도 사용자에게 알릴 필요가있다.실제로 활동을 열지 않고도 기본 활동을 묻습니다.

PackageManager p = mContext.getPackageManager(); 
ComponentName cN = new ComponentName(mContext, FakeDownloadActivity.class); 
p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); 

Intent selector = new Intent(Intent.ACTION_DEFAULT); 
selector.addCategory(Intent.CATEGORY_DEFAULT); 
selector.setType(mimeType); 
mContext.startActivity(selector); 

p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); 

위의 코드는 기본 활동 만 선택하는 것이 아니라 활동을 시작합니다. 가짜 활동을 활성화 한 다음 작동을 중지하면 작동합니다. 그러면 Select Default App 대화 상자가 다음에 호출 될 때 표시됩니다. 간단히 기본 활동 만 선택하기 만하면됩니다.

답변

6

당신이 찾고있는 것은 ACTION_PICK_ACTIVITY입니다. 먼저

, 당신은 예를 들어, 선택할 자격이 있어야 응용 프로그램을 정의하는 의도를 만듭니다

Intent mainIntent = new Intent(Intent.ACTION_DEFAULT, null); 
mainIntent.addCategory(Intent.CATEGORY_DEFAULT); 

을 그런 다음 ACTION_PICK_ACTIVITY 의도 생성 및 추가, 당신은 주요 의도에게 전달 이제

Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY); 
pickIntent.putExtra(Intent.EXTRA_INTENT, mainIntent); 

이전에 생성, 당신은 단지이 의도와 결과에 대한 활동을 시작합니다

startActivityForResult(pickIntent, 0); 

사용자가 응용 프로그램을 선택할 수있는 대화 상자가 만들어 지지만 클릭하면 활동이 실행되지 않고 활동에 남아 있고 결과로 onActivityResult 함수가 호출됩니다. 그래서 당신은 그 함수를 만들어야합니다

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

       //In data, you have all the information about the selected application 
     if (data != null) { 
       //You can launch the application that we just picked with startActivity(data); 
       //or explore the variable to get all the information than you want 
     } 
    } 

Intent 클래스를 살펴 보자. 여기에는 패키지 이름 및 시작될 클래스에 대한 정보가 있습니다.

지금부터 필요한 것은 해당 패키지와 클래스를 의도에 대한 기본값으로 설정하거나 필요한 항목을 설정하는 것입니다. 나쁜면은 사용자가 내부적 인 용도로만 정보를 저장할 수 있다는 것입니다. 예를 들어 다음에 사용자가 어떤 작업을 수행 할 때 어떤 앱을 시작할 것인지 결정하는 것입니다. 할 수없는 일은 시스템 설정을 수정하여 주어진 의도에 대한 기본 활동을 설정하는 것입니다. 사실, the package manager has the addPreferredActivity 방법은, 그는이 작업을 수행했는데,하지만이 이유를 제공, API 레벨 8부터 사용되지 않습니다 :

이것은 세 번째 파티 응용 프로그램에서 사용할 수 없었을한다 보호 API입니다. 기본 활동을 할당하는 것은 플랫폼의 책임이며 직접 수정할 수 없습니다. 새로운 선호 활동 매핑을 시스템에 추가하십시오. Context.startActivity()가 일치하는 여러 활동을 찾고 이 주어진 필터와 일치 할 때 이 주어진 활동 구성 요소를 자동으로 선택하는 데 사용됩니다.

+0

따옴표 : 나쁜면은 사용자가 다음에 어떤 작업을 수행 할 때 어떤 앱을 실행할지 결정하는 것과 같은 내적인 목적으로 만 정보를 저장할 수 있다는 것입니다. 피하기 위해 노력하고 있습니다. 솔루션은 주어진 인 텐트에 대한 Android의 시스템 설정을 설정해야합니다. – Randy

+1

안드로이드 팀이 appentent to change를 결정했기 때문에 Froyo에서 그 기능을 사용하지 않기로 결정했기 때문에 앱을 열지 않고도 그렇게 할 수는 없을 것입니다. 기본값을 사용하여 수행해야합니다. 시스템에 의해 생성 및 실행기가 생성됩니다. 적어도 이것으로 사용자가 앱을 선택하고 어떤 앱이 선택되었는지 알 수있는 대화 상자가 있습니다.내가 생각해내는 것이 최선이다. 나는 두려워 아무것도 할 수 없다. –

+0

그건 내가 의심하는 것이지만 그 노력에 감사드립니다. – Randy

관련 문제