2012-09-28 8 views
0

정보를 내 기본 활동뿐만 아니라 다른 클래스로 보내는 서비스에 내재적 인 의도가 있습니다. 나는 또한 이제 나의 주요 활동을 시작하려는 의도를 원한다. 나는 이것과 관련된 수많은 게시물을 살펴본 결과, 매니 페스트에 addCategory, setAction(MAIN; the activity's name; you name it, I've tried it...), category.DEFAULT 등의 많은 다른 것들을 시도해 보았습니다. ActivityNotFoundExceptions (가장 일반적으로) 또는 다른 방식으로 바람직하지 않은 행동을 일으키는 몇 가지 다른 것들을 시도했습니다.서비스의 암시 적 의도가있는 주 활동 시작

여기에 인 텐트가 설정되고 매니페스트의 관련 부분이 있습니다. 인 텐트의 수신자는 주 활동에 등록됩니다.

final String NEW_DOSES = "changed to protect the innocent"; 
Intent bluetoothBroadcast = new Intent(); 
several putExtra lines here 
bluetoothBroadcast.setAction(NEW_DOSES); 
sendBroadcast(bluetoothBroadcast); 

<activity 
    android:name=".AsthmaAppActivity" 
    android:label="@string/app_name" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

비교적 작은 변경 사항으로 내 주요 활동을 시작하려는 의도가 있습니까? 미리 감사드립니다.

+0

그것은이'Activity'을 시작하는 것이 좋습니다 아니에요'Service'에서 그것으로도 아니라면 사용자가 직접 행동. '서비스'는 배경 구성 요소이고 '활동'은 UI 구성 요소이며 사용자가 사용자 경험에 좋지 않을 것으로 예상하지 않을 때 UI가 표시되도록합니다. – Squonk

+0

고마워, 네, 그게 좋은 지적이고, 제 질문에 언급하려고 했어요. 비록 그것이 일반적으로 좋은 습관이 아니라는 것을 알고 있지만, 그럼에도 불구하고 우리는 앱이 이런 식으로 사용자의 얼굴에있게되기를 원합니다. – hBrent

+0

'Intent' 엑스트라가 무엇이고 얼마나 자주 바뀔지 설명 할 수 있습니까? 'Activity'가 이미 열려있을 때 방송 인 텐트'Intent'와'Service'에서'Activity'가 시작될 때 사용할 수있는'STICKY'' Intent'의 조합을 사용할 수 있습니다. – Squonk

답변

1

예 가능하지만 sendBroadcast (bluetoothBroadcast)는 사용할 수 없습니다. sendBroadcast는 활동을 시작하지 않습니다. 이를 달성하려면 startActivity를 사용해야합니다.

public static void LaunchApplication(Context cx, String packagename) { 
    PackageManager pm = cx.getPackageManager(); 
    Intent i = pm.getLaunchIntentForPackage(ai.packageName); 
    if (i != null) cx.startActivity(i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); 
} 

당신은 쉽게 엑스트라 및 활동을 실행하기 위해 필요한 데이터를 조정할 수 있습니다 : 여기 예를 들어 실행기 응용 프로그램이 응용 프로그램을 실행하기 위해 무엇을 할 것입니다. 활동이 myActivity 이름 예를 들어 당신은 다음과 같이 갈 수 있습니다 :이 도움이

Intent i = new Intent(cx, myActivity.class); 
//Put the extras and the data you want here... 
//If you are launching the activity from a receiver component you must use 
//i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
cx.startActivity(i); 

희망 ...

+0

나는 당신이 위에서 제안한 것을 시도했지만, 수신기가 활동에 사용되는 방식 때문에, 활동은 더 이상 원하는 행동을 수행하지 않았다. startActivity가 호출 할 때 필요로하는 것을하기 위해 액티비티의 코드를 확실히 변경할 수는 있지만, 그렇게하지 않아도되기를 바랬다. 나는 지금 기억하지 않는다. 그러나 나는 startActivity를 사용하는 것이 그것의 수신자를 가진 다른 클래스에 의해 수신되지 않았다는 것을 의미한다고 생각한다. – hBrent

+1

기본 동작이 일부 동작 및 응용 프로그램의 기본 진입 점에 대한 수신기 여야한다면이 코드를 다음과 같이 코딩해야합니다. 내 말은 원하는 작업을 수행하지 않으면 기본 활동을 시작할 수 없다는 것입니다. 어쩌면 수신기와 주요 활동에 대해 다른 구성 요소를 사용하는 것을 고려해야합니다. 결론은 내가 활동을 시작한 sendBroadcast를 통해 "Intent"라고 생각할 수 없다는 것입니다. (내가이 권리를 얻는다면) ... – Christos

+0

무엇이 이해되는지 잘 모르겠습니다. "원하는 작업을 수행하지 않으면 기본 활동을 시작할 수 없습니다"라고 말하면서 startActivity를 사용하여 활동을 시작해야 할 것 같습니다. 인 텐트를 받아야하는 다른 클래스에 대해서는 sendBroadcast를 사용하고 주 활동을 시작하려면 startActivity를 사용해야합니다. 두 개의 별도 Intents가 필요 없다고 가정합니다. 당신의 도움을 주셔서 감사합니다. – hBrent