android.widget.ShareActionProvider does not work on the emulator

Reported by [email protected], Feb 13, 2012
If I add a ShareActionProvider to my application it works file on a real device but not on the emulator. If I press the Share button in the emulator nothing happens.


Here is my menu:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

   <item android:id="@+id/menu_share"
          android:title="Share"
          android:showAsAction="ifRoom"
          android:actionProviderClass="android.widget.ShareActionProvider" />
    <item
        android:id="@+id/item1"
        android:showAsAction="ifRoom"
        android:title="Hello">
    </item>
    <item
        android:id="@+id/item2"
        android:showAsAction="ifRoom"
        android:title="This will not fit in the Action bar">
    </item>

</menu>

I add this menu to my Activity:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.mymenu, menu);
provider = (ShareActionProvider) menu.findItem(R.id.menu_share)
.getActionProvider();
doShare();
return true;
}



public void doShare() {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "Message");
provider.setShareIntent(intent);
}
Comment 1 by project member [email protected], Feb 23, 2012
(No comment was entered for this change.)
Status:
Owner: [email protected]
Labels: -Component-Tools Component-Framework
Comment 2 by [email protected], Mar 29, 2012
This is due to their only being a single (or zero) applications which support that intent. If this is the case the provider will not allow any interaction. It would be nice if there was a Toast or the dropdown still showed with a message of some sort.
Comment 3 by [email protected], Mar 30, 2012
I agree with Jake : this is because the emulator do not have many apps that can answer the intent.
Comment 4 by [email protected], Mar 30, 2012
SMS app is available and this accepts Intent.ACTION_SEND. If I trigger this directly it also works. Hence I suspect still a bug.
Comment 5 by project member [email protected], Mar 30, 2012
(No comment was entered for this change.)
Owner: [email protected]
Comment 6 by [email protected], Jun 7, 2012
If you add another app (see attachment for example) to your emulator supporting ShareIntents of type text/plain and accepting Intent.ACTION_SEND, the ShareProvider will work. It then also displays the already mentioned Messaging App. This however should be considered a workaround.
pva-sharetarget.zip
147 KB   Download
Comment 7 by [email protected], Aug 1, 2012
I can reproduce this bug too, and the weird thing is it works if you've opened the list at least once, with at least two intents.

For example:

Two activities: Open list.
Change intent to one that resolves to one activity.
Open list: Still works.

It doesn't work if you haven't yet opened it.
Comment 8 by [email protected], Aug 1, 2012
Seems related to these lines in ActivityChooserView$ActivityChooserViewAdapter:

if (!mShowDefaultActivity && mDataModel.getDefaultActivity() != null) {
activityCount--;
}

IF you haven't opened the list yet, activityCount gets subtracted by 1, getCount() returns 0 and the button gets disabled. The list still contains one activity.

The title should be changed, because this doesn't really have anything to do with the emulator and affects real production devices. Even if there's only 1 activity, it should still be shown instead of disabling the button.
Comment 9 by [email protected], Dec 10 (6 days ago)
I wonder, based on the title, whether this bug is as visible as it should be. Is there a way to update the title to more closely reflect the nature of the bug?

I can imagine that emulator-related bugs hover somewhere near the bottom of the priority list, and this is not an emulator-only bug. A proper title might also help with searching, which might prevent a few developers from spending 3 hours wondering why their shiny new share button just... does... nothing.

猜你喜欢

转载自hcleon.iteye.com/blog/1749075