2010-12-29 9 views
7

アプリケーションにプラグインを持たせる方法を見つけようとしています。プラグインを使用できるアプリケーションを作成する

私の目標は、Coreアプリケーションを持っており、市場でもダウンロードすることができますプラグインを提供することです。

プラグインは互いにやりとりしないので、コアアプリケーションは、プラグインが使用するSDKの種類の複数のアプリケーションのディレクトリに似ています(つまり、何か、天気、ラジオプレーヤーなど)。 。

は、Androidのdocにチックタックトーの例があるが、外部libが宣言するために、メインのアプリが必要です。私の願いは、コアアプリケーションが新しいインストールされたプラグインを検出して表示することです。

私はthis other questionを見つけましたが、何も答えはありません。

これを行う方法はありますか?

編集:市場に別のアプリを購入してロックを解除することができるアプリケーションもあります。どのように機能するのですか?面白いことはまだありませんでした。あなたは、「アンドロイドロック解除」をグーグルときあなたが見つけるものを知っている:)

+0

ロックされていないプログラムにはすでにすべてのものが含まれており、機能/ボタンは表示されません。それとも、なぜロック解除プロセスがとても速いのか疑問に思いましたか? –

+0

私はこれらの機能/ボタンが隠されていると確信していますが、どうすればいいですか? 「アンロック」アプリケーションがインストールされていることをどのように検出しますか? – Jonas

答えて

2

あなたが別のアプリケーションを探すためにPackageManagerを使用することができます。すべての 'プラグイン'のパッケージ名を知っていれば、このようにそれぞれのプラグインをチェックするだけです。

 PackageManager pm = getPackageManager(); 
        try { 
         ApplicationInfo appInfo = pm.getApplicationInfo("com.package.name.your.looking.for", 0); 
         //if we get to here then the app was found, do whatever you need to do. 
        } catch (NameNotFoundException e) { 
         //app was not found 
        } 
+0

ええ、たぶん、getInstalledPackages()で遊んで、その仕事をします。ありがとう – Jonas

2

あなたはこの方式を採用することができます(MainAppには、検索するためにどのパッケージを知っている必要があります)PackageManager.getApplicationInfo(パッケージ、int型を使用して)プラグインからメインアプリを分離する場合: を実行時にMainAppに送りますすべてのプラグインが(契約によって)聴かなければならない放送意図。 これに対応して、すべてのプラグインはMainAppのコンポーネントに直接インテントを送信し、利用可能なプラグインに関する情報とそのプラグインに関する情報を登録します。 この方法では、新しいプラグインが作成されるたびにMainAppを更新する必要はありません。

4

これは少しクリーナーですので、あなたは、try catchブロックを使用する必要はありません。 これにより、同じ名前のアプリを作成して手動でインストールすることもなくなります。

public boolean checkIfAllowed() 
{ 
    PackageManager pm = getPackageManager(); 
    int match = pm.checkSignatures("your.first.package", "your.second.package"); 
    if (match == PackageManager.SIGNATURE_MATCH) 
    { 
     Log.d("ALLOWED?", "signatures match"); 
     return true; 
    } 
    else 
    { 
     Log.d("ALLOWED?", "signatures don't match"); 
     return false; 
    } 
} 
関連する問題