0

アプリと、別のアプリの機能を拡張する別のアプリがあります。メインアプリから他のアプリにインテントを送信してstartActivityForResult存在を確認し、チェック値を取得するために使用していますが、ランチャーからアイコンを非表示にする機能もユーザーに提供したいと考えています。問題は、アイコンが非表示の場合、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

ランチャーから非表示にするアプリケーション用の新しいインテント フィルターを作成します (ランチャーのインテント フィルターを削除します)。次に、最初のアプリケーションで、作成したインテント フィルターを起動するインテントを作成します。

なぜ個別のアプリケーションが必要なのですか? 私の見解では、アプリケーションに 2 番目のアクティビティを用意し、明示的なインテントを使用して実行する方が簡単です。

于 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 に答える