0

いくつかのダイアログの問題により、 createChooser メソッドを使用して ACTION_SEND を意図することはできません共有アクションを使用して標準のアクティビティで独自のリストビューを作成する必要があります。

ただし、メニュー項目のみが actionProviderClass プロパティを持っていることがわかりました:android:actionProviderClass="android.widget.ShareActionProvider"

独自の共有アクション リストを作成するにはどうすればよいですか?

以下は、ShareActionProvider がどのように機能するかのコードです。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    /** Inflating the current activity's menu with res/menu/items.xml */
    getMenuInflater().inflate(R.menu.share_menu, menu);

    /** Getting the actionprovider associated with the menu item whose id is share */
    mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_item_share).getActionProvider();

    /** Setting a share intent */
    mShareActionProvider.setShareIntent(getDefaultShareIntent());

    return super.onCreateOptionsMenu(menu);

}

// Call to update the share intent
private void setShareIntent(Intent shareIntent) {
    if (mShareActionProvider != null) {
        mShareActionProvider.setShareIntent(shareIntent);
    }
}

   /** Returns a share intent */
private Intent getDefaultShareIntent(){
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("text/plain");
    intent.putExtra(Intent.EXTRA_SUBJECT, "SUBJECT");
    intent.putExtra(Intent.EXTRA_TEXT,"Extra Text");
    return intent;
}
4

1 に答える 1

1

PackageManager.queryIntentActivities(Intent, int)特定のインテントを処理できるアクティビティとサービスのリストを取得するために使用できます。

final List<ResolveInfo> resolveInfos = context.getPackageManager().queryIntentActivities(shareIntent, 0);
for (Iterator<ResolveInfo> iter = resolveInfos.iterator(); iter.hasNext();) {
    ResolveInfo resolveInfo = iter.next();
    if (resolveInfo.activityInfo != null) {
        final Drawable icon = resolveInfo.loadIcon(PackageManager);
        final String title = resolveInfo.loadLabel(PackageManager);
    }
}
于 2013-09-12T10:54:24.660 に答える