0

콘텐츠 제공 업체와 데이터를 공유하는 데 필요한 애플리케이션이 5 개 이상 있으며 각 애플리케이션을 먼저 설치해야 테이블과 URI를 만들어야하므로 모든 애플리케이션에서 매니페스트에 제공 업체를 선언해야합니다. 프로 바이더를 초기화하는 어플리케이션 권한을 부여합니다. 설치 오류 : INSTALL_FAILED_CONFLICTING_PROVIDER 오류가 발생했습니다. 어떻게이 문제를 해결할 수 있습니까?android 콘텐츠 제공 업체 오류 INSTALL_FAILED_CONFLICTING_PROVIDER

답변

2

I have more than 5 applications on the phone that they need to share data with content provider

대부분의 경우 이는 좋지 않습니다.

so in all applications I should declare provider in manifest, to give the application authority to initialize provider

그건 작동하지 않습니다.

But I got Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER error

이것이 작동하지 않는 이유입니다.

how can I manage this problem ?

이 좋은 생각하는 순간 가정하면, android:enabled="false"로 표시된 <provider>와 응용 프로그램을 제공 할 수있다. 그런 다음 첫 번째 앱은 ContentProvider에 액세스하려고 시도하고 다른 사람이 ContentProvider을 설정하지 않은 것으로 확인되면 자체 앱을 활성화 할 수 있습니다 (PackageManagersetComponentEnabledSetting() 참조).

그래서 다섯 개의 응용 프로그램 이름이 A, B, C, D 및 E라고 가정 해 봅시다. A가 먼저 설치되었습니다. 사용자가 그것을 실행하면 A는 ContentProvider이 없음을보고 자체를 활성화합니다. 사용자는 B, C, D 및 E를 설치하고 A는 모두 ContentProvider을 사용하여 데이터를 저장합니다. 사용자는 이제 A를 제거합니다. B, C, D 및 E는 A가 제거 될 때 데이터가 사라 지므로 모든 데이터를 잃게됩니다. 모든 사용자가이 점을 이해하지 못합니다.

B, C, D 및 E가 A에 전적으로 의존하는 경우에만 좋은 시나리오가됩니다.이 경우 B, C, D 및 E는 자신의 ContentProvider이 필요하지 않습니다. 그들은 항상 A를 사용할 수 있고 A가 없으면 사용자의 잘못입니다.

+0

답변 해 주셔서 감사합니다. 안타깝게도 앱 설치 순서를 관리 할 수 ​​없습니다. 먼저이 애플리케이션을 설치할 수 있습니다. 이 경우 공유 데이터 저장소를 구현하는 방법은 무엇입니까? – alexanoid

+0

@alexanoid : "이 경우 공유 데이터 저장소를 구현하는 방법은 무엇입니까?" - 나는 이것을위한 좋은 전략을 모른다. 사용자가 임의의 순서로 앱을 제거 할 수 있기 때문에 복잡한 문제입니다. 내 직감은 데이터를 지속적으로 공유하려고 시도하는 것이 아니라 사용자가 한 앱에서 다른 앱으로 데이터를 명시 적으로 복사 할 수 있도록하는 것입니다. 외부 저장소의 일부 일반적인 위치, 즉 앱을 제거 할 때 제거되지 않지만 마지막 앱을 제거 할 때 정리할 수없는 위치에 데이터를 유지하려고 할 수 있습니다. – CommonsWare

+0

다시 한번 감사드립니다! 간단한 텍스트 파일의 경우, 간단한 접근법을 사용할 수 있습니까? 예를 들어 File f = new File (getContext(). getFilesDir(), "someveryvery uniquename.txt"); 모든 앱간에 정보 (읽기/쓰기)를 공유하려면 어떻게해야합니까? 이 목적으로 getFilesDir() 메서드를 사용하는 것이 좋은 생각입니까? – alexanoid

0

이 같은 모든 응용 프로그램의 매니페스트 제공자를 정의해야합니다 :

android:authorities="com.app.SomeContentProvider${applicationId}" 

것이 중요 공급자는 모든 응용 프로그램에 대한 고유이다.

관련 문제