요즘은 책도 많고 블로그에 자료도 많아서 자세히 소개가 잘 되어 있어서 startActivity 를 실행 시키는것은 큰 어려움이 없다.
startActivity 를 할때 두가지 생각을 해야 하는데.. 명시적으로 할 것인가 암시적으로 할 것인가~!!
명시적인 호출 방법은 Activity의 이름을 직접 호출 하는경우이고..
암시적인 호출 방법으로는 IntentFilter 통해 Action 과 Category 조건이 맞는 것을 필터링해서 상황에 맞는 Activity 를 실행시켜준다.
어플을 실행 시킬려고 했다..
뭐 Activity 를 실행시켜주면 되겠군~?ㅋㅋ
쉽게 생각했지만 문제가 발생햇다.. Package에 어떤 Activity가 첫번째 실행 액티비티인지 어떻게 아느냐~~ㅜㅜ
구글링과 풀소스를 뒤져본 결과..의외로 간단하게 해결 되었음..
package lowmans.test.MyTest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MyTest extends Activity {
private Intent intent;
private final String packageName = "com.android.music";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
intent = this.getPackageManager().getLaunchIntentForPackage(packageName);
Button btn = (Button)findViewById(R.id.Button01);
btn.setOnClickListener(new OnClickListener(){
public void onClick(View v){
MyTest.this.startActivity(intent);
}
});
}
}
----------------------------------------------------------------------------------------------------------
풀소스(2.1 Eclair)에서 찾아보니..요렇게 생겼더군..역쉬 있을 법한건 찾아보면 나온다..^^;
@Override
public Intent getLaunchIntentForPackage(String packageName) {
// First see if the package has an INFO activity; the existence of
// such an activity is implied to be the desired front-door for the
// overall package (such as if it has multiple launcher entries).
Intent intentToResolve = new Intent(Intent.ACTION_MAIN);
intentToResolve.addCategory(Intent.CATEGORY_INFO);
intentToResolve.setPackage(packageName);
ResolveInfo resolveInfo = resolveActivity(intentToResolve, 0);
// Otherwise, try to find a main launcher activity.
if (resolveInfo == null) {
// reuse the intent instance
intentToResolve.removeCategory(Intent.CATEGORY_INFO);
intentToResolve.addCategory(Intent.CATEGORY_LAUNCHER);
intentToResolve.setPackage(packageName);
resolveInfo = resolveActivity(intentToResolve, 0);
}
if (resolveInfo == null) {
return null;
}
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName(packageName, resolveInfo.activityInfo.name);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
return intent;
}
[출처] 어플실행시키기(Package name으로 액티비티 실행)|작성자 아즈라엘
댓글
댓글 쓰기