2011-10-27 4 views
2

다른 응용 프로그램의 Activity을 내 Activity에서 시작하고 싶습니다. 그러나 모든 정보는 해당 응용 프로그램 패키지의 이름입니다. 나는 다음을 수행하십시오패키지 이름 만 사용하여 다른 응용 프로그램에서 활동 시작

Intent intent = new Intent(); 
intent.setPackage(anotherApplicationPackageName); 
intent.setAction(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_LAUNCHER); 
startActivity(intent); 

나는이 API를 사용하여 제대로 알고있는 것처럼, 안드로이드는 주어진 패키지 안에이 Intent을 처리 할 수있는 Activity을 찾을 것입니다,하지만 난 항상 ActivityNotFoundException를 얻을.

질문은 무엇입니까?

+0

[1] 소식 [이] 내 질문에 대한 답을 찾기 [1] : http://stackoverflow.com/questions/3872063/android-launch-an-application-from-another -application – teoREtik

답변

1

범주 'Intent.CATEGORY_DEFAULT'로 다른 활동의 의도 필터를 선언하고 사용자 지정 동작을 만들고 해당 범주 및 동작을 사용하여 사용자 지정 동작을 호출해야합니다. 의도로 패키지를 설정하면 범위가 축소됩니다.

+1

점심을 먹으려 고 시도하는 응용 프로그램이 내 응용 프로그램이 아니기 때문에 나는 이것을 만들 수 없습니다. 왜 다른 응용 프로그램의 활동에서 또 다른 인 텐트 필터를 decalre해야한다고 결정 했습니까? – teoREtik

+0

다음과 같이 활동을 시작해야합니다 :'intent.setComponent (ComponentName component)' – Giohji

+0

'setComponent' 또한 활동 이름을 사용한다고 가정하고,이 문제를 해결했습니다. 내 질문에 대한 의견을 보아 주셔서 감사합니다.) – teoREtik

8
PackageManager pmi = getPackageManager(); 
    Intent intent = null; 

intent = pmi.getLaunchIntentForPackage(packageNameToLaunch);      
if (intent != null){ 
    startActivity(intent); 
} 
0

나는 Intent.ACTION_SEND과 비슷한 문제가 있습니다. 아마이 코드는 누군가를 위해 도움이 될 것입니다 :

/** Knowing intent and package name, set the component name */ 
public static Intent setComponentByPackageName(Context context, String packageName, Intent intent0) { 
    Intent intent = new Intent(intent0); 
    if (null == intent.getType()) { 
     intent.setType("text/plain"); 
    } 
    PackageManager pm = context.getPackageManager(); 
    List<ResolveInfo> rList = pm.queryIntentActivities(intent, 0); 
     // possible flags: 
     // PackageManager.MATCH_DEFAULT_ONLY PackageManager.GET_RESOLVED_FILTER 
    for (ResolveInfo ri : rList) { 
     if (packageName.equals(ri.activityInfo.packageName)) { 
      intent.setComponent(new ComponentName(packageName, ri.activityInfo.name)); 
      return intent; 
     } 
    } 
    return null; 
} 

가합니다 (ResolveInfo 목록이 비어) 일을 만들려고 노력하는 과정에서, 나는 setType()이 (실종됐다 당신이하지 않는 것을 발견 사실 다음이 충분하므로, setType()setPackage() 당신이 경우 setComponent()) 필요 : 당신이 다른 앱의 패키지 이름을 알고으로

intent.setAction(Intent.ACTION_SEND); 
    intent.setType("text/plain"); 
    intent.setPackage("com.xxxxxx"); 
    // ... 
    intent.putExtra(Intent.EXTRA_TEXT, text); 
    // ... 
    startActivityForResult(intent, ...); 
1

'수 임의의 int를 더한다. nt 필터를 사용하여 다른 앱을 실행해야합니다.

인 텐트 intent = getApplicationContext(). getPackageManager(). getLaunchIntentForPackage (anotherApplicationPackageName);

startActivity (인 텐트);

잘 작동합니다.

관련 문제