よく分かりやすいように、[共有]メニューには2つの方法があります。まず一つは
startActivity(Intent.createChooser(Intent, CharSequence)
を使用することです。しかし、それは別の活動でだって、この場合には、私は、作成された共有メニューへのアクセスを取得する方法がわからないです。 しかし、あなたのアプリケーションに表示されている共有アイテムのリストを管理したい場合、共有メニューアイテムの実装にアプローチする別の方法があります。 このコードスニペットを見てみましょう:
//Prepare an intent to filter the activities you need
//Add a List<YourItemType> where you going to store the share-items
List<YourItemType> myShareList = new List<YourItemType>;
PackageManager packageManager = mContext.getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
int numActivities = activities.size();
for (int i = 0; i != numActivities; ++i) {
final ResolveInfo info = activities.get(i);
String label = info.loadLabel(packageManager).toString();
//now you can check label or some other info and decide whether to add the item
//into your own list of share items
//Every item in your list should have a runnable which will execute
// proper share-action (Activity)
myShareList.add(new YourItemType(label, info.loadIcon(packageManager), new Runnable()
{
public void run() {
startResolvedActivity(intent, info);
}
}));
}
このコードスニペットは、共有要求を処理することができる活動のリストを取得する方法を示しています。次に行う必要があるのは、独自のUIを表示することです。あなたが選択しようとしているのはあなた次第です。
アレックス、それは貴重な情報ですが、私は何をしようとしているのか完全にはっきりしていないと思います。私はちょうど私のアプリで '共有'項目をフィルタにするつもりはない - 私はすべてのアプリでそれらをフィルタリングしたい! それぞれのアプリは自分のサンドボックス内に共有メニューを実装しているのでおそらく不可能だと思っていますが、私が望んでいたのは、システムAPIに組み込まれた「共有」メニュー項目のフックがあることですそのリストに表示されているアイテムをフィルタリングして組み合わせることができます。 –
また、ICSでは、自分のアプリ内に*頻繁に使用されるアイテムが「共有」メニューの一番上に浮かぶコード*を実装できることを知っています。そのプロパティに直接アクセスする方法です。 –
ああ、そうです。私はあなたの「私が使用しないサービスのいくつかを除外するアプリケーションを構築する」と誤解していました。まあ、私はそれを自分で試したことがないので、この1つでは確信できません。しかし、リストがパッケージマネージャからの情報に基づいて動的に生成された場合(私がそうであると思う)、共有リストをグローバルに操作する唯一の方法は、PackageManagerを操作することです。しかし、簡単にそのAPIを見て、私はあなたの目標を達成する方法が表示されません。 ICSのことについて:それは面白そうに聞こえる - 私にリンクや何かを教えてもらえますか? –