2009-11-21 3 views
2

동일한 응용 프로그램의 무료 및 프리미엄 버전 (거의 동일한 코드, "if"가있는 동일한 클래스, 매니페스트의 다른 패키지, 매니페스트의 동일한 프로세스 이름)이 있습니다. 주 활동은 IMPLICIT 의도를 사용하여 몇 가지 물건을 실행하는 서비스를 호출합니다.android : 여러 구현이 동일한 의도에 응답 할 때 OS가 구성 요소 구현을 선택하는 방법은 무엇입니까?

휴대 전화에 두 앱을 모두 설치하면 프리미엄 활동이 실제로는 "무료"서비스를 시작하고 "프리미엄"서비스가 다른 것으로 시작하는 것으로 나타납니다. 나는 카테고리와 packagemanager로 놀아 왔지만 너무 복잡해 보입니다.

질문 :

안드로이드는 같은 의도에 응답하는 여러 구성 요소를 어떻게 처리합니까 방법
  1. ?
  2. 어떻게 할 것입니까? 여러 개의 앱에서 동일한 서비스가 있고 모든 앱에서 하나의 인스턴스 만 호출되기를 원합니다.

답변

0

여러분은 여분의 부울 인 isPremium을 의도에 추가 할 수 있습니다. 당연히 당신은 그 "if"의 더 많은 것을 필요로 할 것입니다.

활동 :

//send broadcast 
Intent serviceStarted = new Intent(Actions.ACTION_START_SERVICE); 
serviceStarted.putExtra(Extras.EXTRA_PREMIUM_VERSION, PREMIUM_VERSION); 
sendBroadcast(serviceStarted); 

수신기 : 그것은 올바른 아니에요, 그래서 만약

if (!intent.getExtras().getBoolean(Extras.EXTRA_PREMIUM_VERSION)) { 
    Log.v(TAG, " - ignoring wrong version"); 
    return; 
} 
+0

난 단지 앞으로 하나의 수신기에 그 의도를 안드로이드를 믿고, 다른 하나는 그것을받지 않을 것입니다. 여러 활동이 동일한 의도에 응답하지만 서비스에 대해 궁금한 점이 있다면 팝업이 표시된다는 것을 알았습니다. –

+0

나는 당신이 그것을 어떻게 부르 느냐에 달려있다 - startActivity와 startService는 하나의 Activity/Service를 목표로하고 팝업을 시작하여 무엇을 시작할 것인지 선택할 수있다. 그러나 sendBroadcast를 사용하면 수신기에서 전달 된 모든 수신기가 트리거됩니다. – Tapirboy