기본 콘텐츠로 건너뛰기

2022 08 26 회사 워크샵

어플실행시키기(Package name으로 액티비티 실행)


요즘은 책도 많고 블로그에 자료도 많아서 자세히 소개가 잘 되어 있어서 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으로 액티비티 실행)|작성자 아즈라엘

댓글