【问题标题】:Select default launcher for an app not appear in Android 7为未出现在 Android 7 中的应用选择默认启动器
【发布时间】:2020-01-01 09:23:30
【问题描述】:

我有一个作为启动器运行的应用,在 Android 4 中运行良好,但在 Android 7 和 8 中,选择启动器对话框没有出现

// 
// Decompiled by Procyon v0.5.36
// 

package com.r7developers.unityplugin;

import android.os.Build;
import android.annotation.TargetApi;
import android.os.Process;
import android.app.AppOpsManager;
import android.content.Intent;
import com.rvalerio.fgchecker.AppChecker;
import android.content.Context;

public class Plugin
{
    static Context mContext;
    static String mBundleIdentifier;
    static AppChecker mAppChecker;

    public static void init(final Context context, final String bundleIdentifier) {
        Plugin.mContext = context;
        Plugin.mBundleIdentifier = bundleIdentifier;
    }

    public static void start() {
        Plugin.mAppChecker = new AppChecker();
        Plugin.mAppChecker.other((AppChecker.Listener)new AppChecker.Listener() {
            public void onForeground(final String packageName) {
                if (packageName != null && !packageName.contains(Plugin.mBundleIdentifier)) {
                    final Intent startHomescreen = new Intent("android.intent.action.MAIN");
                    startHomescreen.addCategory("android.intent.category.HOME");
                    startHomescreen.setFlags(268435456);
                    Plugin.mContext.startActivity(startHomescreen);

                }
            }
        }).timeout(1000).start(Plugin.mContext);
    }

    public static void stop() {
        Plugin.mAppChecker.stop();
    }

    public static void requestUsageStatsPermission() {
        if (needsUsageStatsPermission() && !hasUsageStatsPermission()) {
            Plugin.mContext.startActivity(new Intent("android.settings.USAGE_ACCESS_SETTINGS"));
        }
    }

    @TargetApi(19)
    public static boolean hasUsageStatsPermission() {
        final AppOpsManager appOps = (AppOpsManager)Plugin.mContext.getSystemService("appops");
        final int mode = appOps.checkOpNoThrow("android:get_usage_stats", Process.myUid(), Plugin.mContext.getPackageName());
        final boolean granted = mode == 0;
        return granted;
    }

    public static boolean needsUsageStatsPermission() {
        return Build.VERSION.SDK_INT >= 21;
    }

    public static void openSettings() {
        final Intent intent = new Intent("android.settings.SETTINGS");
        intent.addFlags(268435456);
        Plugin.mContext.startActivity(intent);
    }
}

这段代码是从unity项目的一个jar插件反编译而来的

我有什么遗漏的吗?

【问题讨论】:

    标签: android unity3d android-launcher


    【解决方案1】:

    您的问题一定是由于清单中缺少某些行引起的。 Android 发展非常迅速,并且由于权限系统的更改,最初为旧版本制作的某些应用程序可能不再工作。 这也必须适用于 Android Manifest。幸运的是,您可以在较旧的设备上运行它,但处理较新的设备似乎有问题。

    您是否尝试过重新编译较小版本的代码并在多个版本上进行测试?

    只需查看一些示例启动器(但未使用 Unity 引擎制作),就可以帮助您了解是否遗漏了什么。

    这是我在 GitHub 上找到的(第一个)Android 启动器的链接:KISS/app/src/main/AndroidManifest.xml

    尝试添加您缺少的行,尤其是帮助 Android 了解您的应用在菜单中显示时应该注意什么的意图过滤器,例如启动器选择器。

    我不是专家,但我知道使用 Android 可能会很痛苦。

    【讨论】:

    • 谢谢你的回答,清单看起来几乎一样,它有意图过滤器和所需的权限,问题是在android 4中它删除了默认启动器,然后它会显示启动器对话框选择何时单击主页按钮,但在 android 7 -or+ 中,它保留导致我在此视频中显示的问题的默认启动器youtube.com/watch?v=5fqCkLgjMyo&feature=youtu.be
    • 好的,现在我更好地理解了这个问题。尝试进入您的设置>应用程序>(默认启动器应用程序),在这里您会找到两个子类别,其中一个是“设置为默认值”,进入并单击“清除默认值”,现在启动器选择框应该再次出现您将按下主页按钮,第二个子类别是“主屏幕”,进入并选择您的。我的手机在三星的 rom 上运行,所以某些菜单/按钮可能不一样
    • 是的,这将解决我知道的问题,但是,我希望该应用程序作为启动器工作,当您在设备中安装启动器时,您将获得“选择家庭应用程序”对话框,因此您无需手动输入设置并将其设置为默认启动器或清理默认启动器
    • 我确实尝试了 stackoverflow 中所有可用的代码,但都没有工作:/ 我在 android studio 的示例活动中测试代码,尝试自己做
    • (抱歉迟到了)看来Android现在正在使用API​​ 29中引入的“RoleManager”,看看这个答案https://stackoverflow.com/a/23110115。在我的注释 9 上,当尝试使用另一个启动器时,这个选项并没有出现,我被“强制”点击应用程序提出的“设置为默认启动器”按钮,从而出现了一个选择器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 2016-08-30
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    相关资源
    最近更新 更多