2016-06-23 20 views
1

앱이 있으며 2 가지 활동이 있습니다. 설치 후 앱 실행, differenct 동작 (Android)

<activity android:name=".LauncherActivity" 
      android:theme="@style/LauncherTheme" 
      android:screenOrientation="portrait"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN"/> 
     <category android:name="android.intent.category.LAUNCHER"/> 
    </intent-filter> 
</activity> 

<activity android:name="MainActivity" 
      android:launchMode="singleTop" 
      android:screenOrientation="portrait"/> 

1.


(-r 응용 프로그램을 설치 ADB) 명령 라인을 통해 앱을 설치합니다 (I 예상).
앱 아이콘을 탭하여 열면 실행기 기능이 표시됩니다. 그런 다음 MainActivity에 대한 작업을 시작하면 MainActivity가 표시됩니다.
HOME을 누른 다음 다시 앱 아이콘을 누르면 MainActivity가 다시 표시됩니다.

2 (예외?)
packageinstaller를 통해 앱을 설치하십시오.
설치가 완료되면 패키지 설치 프로그램의 "열기"버튼을 탭하면 LauncherActivity가 표시됩니다. 그런 다음 MainActivity, MainActivity가 시작됩니다.
홈을 탭한 다음 앱 아이콘을 다시 탭하면 LauncherActivity가 다시 표시됩니다 !! 내 LauncherActivity에서

private void startMainActivity() { 
    Intent intent = new Intent(this, MainActivity.class); 
    startActivity(intent); 
    finish(); 
} 

내가 mLaunchIntent

InstallAppProgress.java

mLaunchIntent = getPackageManager().getLaunchIntentForPackage(mAppInfo.packageName); 

ApplicationPackageManager.java

@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); 
    List<ResolveInfo> ris = queryIntentActivities(intentToResolve, 0); 

    // Otherwise, try to find a main launcher activity. 
    if (ris == null || ris.size() <= 0) { 
     // reuse the intent instance 
     intentToResolve.removeCategory(Intent.CATEGORY_INFO); 
     intentToResolve.addCategory(Intent.CATEGORY_LAUNCHER); 
     intentToResolve.setPackage(packageName); 
     ris = queryIntentActivities(intentToResolve, 0); 
    } 
    if (ris == null || ris.size() <= 0) { 
     return null; 
    } 
    Intent intent = new Intent(intentToResolve); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent.setClassName(ris.get(0).activityInfo.packageName, ris.get(0).activityInfo.name); 
    return intent; 
} 
로 souce에, packageinstaller 시작 활동 조사

나는 아무 정보 활동이 없기 때문에 의도입니다 : 내가 혼란 스러워요

Intent intentToResolve = new Intent(Intent.ACTION_MAIN); 
intentToResolve.addCategory(Intent.CATEGORY_LAUNCHER); 
intentToResolve.setPackage(packageName); 

. 차이 행동이있는 이유는 무엇입니까? 도움! 를 통해

다른 의도 앱이 실행되는 방식에 따라 해고 때문이다
if (!isTaskRoot()) { 
    final Intent intent = getIntent(); 
    if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(intent.getAction())) { 
     finish(); 
     return; 
    } 
} 

(오픈이 여전히 당신을위한 문제입니다,하지만 난 내 MainActivity이를 포함하여이 문제를 해결하는 경우

답변