gpt4 book ai didi

android - 安装后启动应用程序,有不同的行为(android)

转载 作者:行者123 更新时间:2023-11-29 01:19:04 27 4
gpt4 key购买 nike

我有一个应用程序,它有 2 个 Activity 。

<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.(我预料到的)
通过命令行安装应用程序(adb install -r app)。
点击应用程序图标打开它,LauncherActivity 显示,然后我将 startActivity 转到 MainActivity,MainActivity 显示。
点击 HOME,然后再次点击应用程序图标,MainActivity 再次显示。

2.(异常?)
通过 packageinstaller 安装应用程序。
安装完成后,点击packageinstaller中的“打开”按钮,LauncherActivity显示,然后我将startActivity转到MainActivity,MainActivity显示。
点击 HOME,然后再次点击应用程序图标,LauncherActivity 再次显示!!

在我的 LauncherActivity 中

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

我使用 mLaunchIntent 调查源、packageinstaller 启动 Activity

InstallAppProgress.java

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

应用程序包管理器.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;
}

我没有信息 Activity ,所以 Intent 是:

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

我很困惑。为什么会有不同的行为?帮助!

最佳答案

不确定这是否仍然是您的问题,但我通过将其包含在我的 MainActivity 中解决了这个问题:

if (!isTaskRoot()) {
final Intent intent = getIntent();
if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(intent.getAction())) {
finish();
return;
}
}

这是因为会根据应用程序的启动方式触发不同的 Intent (通过安装屏幕打开与打开与启动器)。

关于android - 安装后启动应用程序,有不同的行为(android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37981321/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com