0

我有一个应用程序和另一个扩展另一个功能的应用程序。我正在使用startActivityForResult从主应用程序向另一个应用程序发送 Intent 以检查是否存在并返回检查值,但我也想为用户提供隐藏启动器图标的可能性。问题是,如果图标被隐藏,则 Intent 会认为该应用程序未安装。我怎样才能解决这个问题?

我如何检查专业应用程序的存在

if (!ISPRO) {
        Log.d("ProApp", "Check for existence of pro app");

        Intent pro_app = new Intent("android.intent.action.MAIN");
        pro_app.setComponent(ComponentName.unflattenFromString("my.app.pro/my.app.pro.Index"));
        pro_app.addCategory("android.intent.category.LAUNCHER");
        pro_app.putExtra("my.app.check_code",
                "thisIsMyCheckCode");

        try {
            startActivityForResult(pro_app, 0);
            Log.d("ProApp", "startActivityForResult started");
        } catch (ActivityNotFoundException e) {
            Log.w("ProApp", "WARNING! The pro app doesn't exist");
        }
    }

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK && requestCode == 0) {
        Log.d("ProApp","Pro functions unlocked");
        ISPRO = true;
    }
}

我如何将检查值发送回主应用程序

    Bundle bundle = this.getIntent().getExtras();
    String check_Code = new String("");

    if (bundle != null)
        check_Code = bundle.getString("my.app.check_code");

    if (check_Code.equals("thisIsMyCheckCode")) {
        Intent retcode = new Intent();
        setResult(RESULT_OK, retcode);
        finish();
    }

我如何隐藏专业应用程序的图标

    PackageManager p = getPackageManager();
    p.setComponentEnabledSetting(getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

提前致谢。

4

3 回答 3

2

您正在从您自己的代码中引起您自己的问题。你有:

    Intent pro_app = new Intent("android.intent.action.MAIN");
    pro_app.setComponent(ComponentName.unflattenFromString("my.app.pro/my.app.pro.Index"));
    pro_app.addCategory("android.intent.category.LAUNCHER");

这段代码说“这个活动必须在启动器中”。因此,如果该活动不在启动器中,则当该代码崩溃时,您不能抱怨。

使用不同<intent-filter>的和匹配Intent的来调用这个插件。如果插件只能由您的主应用程序使用,而不能由其他应用程序使用,请考虑使用签名级别的自定义权限。

于 2012-09-06T14:17:26.583 回答
1

为您的应用程序创建一个新的意图过滤器,该过滤器应该对启动器隐藏(并删除启动器的意图过滤器)。然后在您的第一个应用程序中创建一个意图来启动创建的意图过滤器。

为什么需要单独的应用程序?在我看来,在您的应用程序中拥有第二个活动并使用显式意图运行它更容易。

于 2012-09-06T11:02:06.233 回答
0

根据 的回复CommonsWare,我在这里展示了一个示例代码,以消除关于如何使用不同<intent-filter>和匹配Intent来调用插件的疑问。

我如何检查专业应用程序的存在

if (!ISPRO) {
        Log.d("ProApp", "Check for existence of pro app");

        Intent pro_app = new Intent("android.intent.action.MAIN");
        pro_app.setComponent(ComponentName.unflattenFromString("my.app.pro/my.app.pro.Index"));
//change has been made in next line
        pro_app.addCategory("android.intent.startUpPro");
        pro_app.putExtra("my.app.check_code",
                "thisIsMyCheckCode");

        try {
            startActivityForResult(pro_app, 0);
            Log.d("ProApp", "startActivityForResult started");
        } catch (ActivityNotFoundException e) {
            Log.w("ProApp", "WARNING! The pro app doesn't exist");
        }
    }

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK && requestCode == 0) {
        Log.d("ProApp","Pro functions unlocked");
        ISPRO = true;
    }
}

我如何隐藏专业应用程序的图标

//root package declaration

package="my.app.pro"



//activity declaration

     <activity
    android:name="my.app.pro.Index"
    android:label="@string/app_name"
     >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.startUpPro" />

    </intent-filter>
</activity>

我希望它会有所帮助!

于 2013-03-07T13:30:05.860 回答