Android 에서 기본 프로그램 을 검사,설정 합 니 다.

Android 는 위대 한 시스템 으로서 자 연 스 럽 게 기본 열 림 프로그램 을 설정 하 는 실현 을 제공 합 니 다.이 글 에서 저 는 Android 시스템 에 기본 프로그램 을 설정 하 는 방법 을 소개 합 니 다.기본 프로그램 을 설정 하기 전에 두 가지 상황 이 있 을 수 있 습 니 다.하 나 는 기본 프로그램 이 있 고 다른 하 나 는 기본 프로그램 이 없습니다.
기본 프로그램 이 있 는 지 확인 하기
검 사 는 필수 적 이다.결 과 는 우리 가 다음 단계 에 어떻게 해 야 하 는 지 에 달 려 있 기 때문이다.

public void testGetDefaultActivity() {
    PackageManager pm = mContext.getPackageManager();
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("http://www.google.com"));
    ResolveInfo info = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
    Log.i(VIEW_LOG_TAG, "getDefaultActivity info = " + info + ";pkgName = " + info.activityInfo.packageName);
}
대응 하 는 로그 출력 은 다음 과 같 습 니 다.

I/View    ( 1145 ): View getDefaultActivity info = ResolveInfo{410e4868 com.android.internal.app.ResolverActivity p=0 o=0 m=0x0};pkgName = android
기본 프로그램 이 없 으 면 기본적으로 com.android.internal.app.Resolver Activity 가 표 시 됩 니 다.이 Resolver Activity 는 무엇 입 니까?사실은 프로그램 을 여 는 대화 상자 입 니 다.여산 의 정 체 는 이 렇 습 니 다.

만약 우리 가 오 유 브 라 우 저 를 기본 브 라 우 저 로 설정 했다 면,기본 프로그램 은 오 유 브 라 우 저 에 관 한 정 보 를 표시 해 야 합 니 다.다음 과 같 습 니 다.

I/View    ( 1145 ): View getDefaultActivity info = ResolveInfo{410ae1e8 com.mx.browser.MxBrowserActivity p=0 o=0 m=0x208000};pkgName = com.mx.browser
기본 프로그램 이 설정 되 어 있 는 지 여 부 를 어떻게 판단 합 니까?위의 방법 은 기본 ResolveInfo 입 니 다.info.activity Info.packageName 이 android 라면 설정 되 어 있 지 않 습 니 다.그렇지 않 으 면 기본 프로그램 이 있 습 니 다.

public final boolean hasPreferredApplication(final Context context, final Intent intent) {
    PackageManager pm = context.getPackageManager();
    ResolveInfo info = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
    return !"android".equals(info.activityInfo.packageName);
}
기본 프로그램 이 있 으 면
우리 가 해 야 할 일 은 현재 기본 프로그램의 기본 설정 을 지 우 는 것 입 니 다.
우 리 는 코드 를 통 해 기본 설정 을 우리 의 것 으로 직접 바 꿀 수 있 습 니까?사실은 안 됩 니 다.권한 의 문제 때 문 입 니 다.이러한 안 드 로 이 드 는 리 눅 스 커 널 을 기반 으로 하기 때문에 리 눅 스 는 좋 은 사용자 개념 을 가지 고 있 습 니 다.안 드 로 이 드 의 모든 응용 프로그램 은 리 눅 스 커 널 에 있 는 사용자 입 니 다.두 등급 이 같은 사용 자 는 상대방 을 삭제 할 수 없습니다.
그래서 우 리 는 사용자 에 게 수 동 으로 만 할 수 있 습 니 다.물론 이것 도 대부분의 프로그램의 방법 입 니 다.당신 이 해 야 할 일 은 사용 자 를 프로그램 상세 페이지 로 가 져 가 는 것 입 니 다.이 코드 를 통 해 응용 상세 페이지 로 이동 할 수 있 습 니 다.

public void testStartAppDetails() {
    //Use the destination package name
    Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:com.mx.browser"));
    getActivity().startActivity(intent);
}
설 치 된 응용 프로그램 상세 페이지 로 이동 하면 사용 처 를 알려 주 고 Clear Default 단 추 를 눌 러 야 합 니 다.

만약 에 사용자 가 설치 상세 페이지 에서 프로그램 으로 돌아간다 면 사용자 가 기본 적 인 프로그램 설정 을 정 리 했 는 지 확인 하고 근거 가 있 는 지,기본 적 인 프로그램 설정 이 있 는 지 판단 해 야 합 니 다.기본 적 인 것 이 있다 면 사용자 가 완전히 정리 한 후에 아래 의 기본 설정 프로그램 이 없 는 상황 에 따라 처리 해 야 한 다 는 것 을 계속 알려 야 합 니 다.
브 라 우 저 를 설정 할 때 UC 기본 설정 을 먼저 정리 한 후 돌고래 브 라 우 저 를 정리 해 야 하 는 경우 가 여러 번 있 습 니 다.
기본 프로그램 이 없습니다.
기본 프로그램 이 없 으 면 우리 가 원 하 는 프로그램 을 기본 으로 설정 해 야 합 니 다.그러나 이 페이지 는 코드 에서 이 루어 지지 않 으 려 면 인위적인 상호작용 선택 이 필요 합 니 다.당신 이 해 야 할 일 은 다음 과 같은 코드 를 사용 한 다음 에 힌트 를 꺼 내 서 사용자 에 게 프로그램 을 기본 프로그램 으로 선택 하 라 고 알려 주 는 것 입 니 다.제시 어 는 상상력 을 충분히 발휘 할 수 있 습 니 다.

public void testStartChooseDialog() {
    Intent intent = new Intent();
    intent.setAction("android.intent.action.VIEW");
    intent.addCategory("android.intent.category.BROWSABLE");
    intent.setData(Uri.parse("http://jb51.net"));
    intent.setComponent(new ComponentName("android","com.android.internal.app.ResolverActivity"));
    getActivity().startActivity(intent);
}
기본 프로그램 설정 취소

public void testClearDefault() {
    PackageManager pm = mContext.getPackageManager();
    pm.clearPackagePreferredActivities(mContext.getPackageName());
}
위 방법 은 기본 설정 만 정리 할 수 있 습 니 다.
한 걸음 더 가까이
실제 기본 설정 에 대한 프로필 은/data/system/packages.xml 에 저 장 됩 니 다.

<preferred-activities>
<item name="com.mx.browser/.MxBrowserActivity" match="200000" set="2">
<set name="com.android.browser/.BrowserActivity" />
<set name="com.mx.browser/.MxBrowserActivity" />
<filter>
<action name="android.intent.action.VIEW" />
<cat name="android.intent.category.BROWSABLE" />
<cat name="android.intent.category.DEFAULT" />
<scheme name="http" />
</filter>
</item>
</preferred-activities>
One More Thing
질문:프로그램 이 설치 되 거나 마 운 트 해제 되면 시스템 은 무엇 을 합 니까?
응답:프로그램 이 설치 되 거나 마 운 트 해제 되 었 을 때,브 라 우 저 를 예 로 들 면,오 유 브 라 우 저 를 설치 하거나 UC 브 라 우 저 를 마 운 트 해제 했다 면,외부 프로그램 에서 링크 를 열 었 을 때,시스템 은 이전의 기본 프로그램 을 사용 하지 않 고 선택 대화 상 자 를 팝 업 합 니 다.
질문:언제 시스템 팝 업 선택 프로그램 목록 열기
대답:본인 의 테스트 를 통 해 실제 적 으로 이 렇 습 니 다.Intent 가 왔 을 때 시스템 은 처리 할 수 있 는 Activity 를 동적 으로 수집 한 다음/data/system/packages.xml 에서 읽 고 비교 합 니 다.둘 이 다 르 면 선택 대화 상 자 를 팝 업 합 니 다.

좋은 웹페이지 즐겨찾기