3

ライト(無料)バージョンとフルバージョンの両方でパッケージ化され、おそらく5つのアプリストアに配布されるAndroidアプリを作成しています。

アプリにはServiceによってトリガーされるが含まれAlarmManager.setRepeating(...)ているため、ユーザーが構成可能な間隔で、通常は5分ごとから1時間ごとに起動します。

私が予想する問題は、ユーザーがアプリの無料バージョンとフルバージョンの両方を使用し、場合によっては複数のストアから入手する可能性があることです。Serviceの複数のインスタンスがによってトリガーされるのを防ぐにはどうすればよいAlarmManagerですか?Service名前(マニフェストのパッケージ名と<service>属性)が同じであることを確認するのに役立ちますか?アプリの1つのバリアントが初めて起動されたときに、他のバリアントによって要求された保留中のインテントを無効にする方法はありますか?

4

1 に答える 1

2

効率的な提案ではありません: サービスを開始するたびAlarmManagerに、新しいバージョン (フル バージョンなど) がインストールされているかどうかを確認できます。その場合は、AlarmManager.setRepeating(...)メソッドに負の intervalMillisecond を指定してアラームをキャンセルします。

よりクリーンなアプローチは、古いインストールを強制的に削除することです。アプリのバージョンが初めて起動したらすぐに、以前にインストールされた可能性のある他のパッケージのリストを確認してください。ある場合は、それらを削除します。それらに属するサービスも削除されます。

パッケージの存在を確認する方法は次のとおりです。

public static boolean isPackageInstalled(Context context, String uri) {
    PackageManager pm = context.getPackageManager();
    boolean installed = false;
    try {
        pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
        installed = true;
    } catch (PackageManager.NameNotFoundException e) {
        installed = false;
        // Not installed
    }
    return installed;
}

インテントを呼び出してパッケージをアンインストールする方法については、ここで説明されています:アプリケーションをアンインストールする暗黙のインテント?

于 2012-11-27T16:10:29.533 に答える