3

私は Android でランチャーを作成していますが、これは私がしばらくの間修正しようとしていた問題です。

ランチャーの最初で実行されているすべてのアクティビティを照会するコードを以下に示しますonResume()

final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
final List<ResolveInfo> infos = packageManager.queryIntentActivities(mainIntent, 0);
for (final ResolveInfo info : infos) {
    // create my own recrord for each activity      
}

問題は、ランチャーをデフォルトおよびrebootデバイスとして設定すると、毎回上記のコードで完全なリストの一部しか取得できないことです。いくつかの大きなファット アクティビティ (マメット ナイトなど) が常に欠落しているようです。ただし、上記のコードを 2 回実行すると、完全なリストが返されます。誰にも理由がありますか?私の推測では、PackageManager は太ったアクティビティを解析するのに時間がqueryIntentActivities()かかり、あまりにも早く呼び出された場合、部分的なリストを返すだけです。それは本当ですか?

しかし、なぜデフォルトのランチャーにこの問題がないのでしょうか?

4

1 に答える 1

3

大規模なアクティビティは外部ストレージ パーティションにインストールされる可能性が高く、マウントに時間がかかることがよくあります。私の Samsung Galaxy W フォンのランチャーはまさにこれを行い、SD カードがマウントされてアプリが使用可能になるまで、プレースホルダー アイコンを表示します。

新しいアプリケーションがいつ利用可能になるかを知らせるために PackageManager からのブロードキャストがあるはずですが、一目で見つけることができませんでした。ACTION_MEDIA_MOUNTEDを聞いて、PackageManager が最初にそこに到達することを期待する必要があるかもしれません。

于 2012-11-09T11:20:13.207 に答える