Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android ShareActionProvider work in debugging mode but doesn't in real device

When I debug my app on device, using Eclipse, this is the result, that is what I want:

App image from debug mode

The 'share icon' works fine!

HERE, THE PROBLEM!!!! WHEN I ADD THE APP ON GOOGLE PLAY, AND THEN I INSTALL THE APP FROM IT, THIS IS THE RESULT:

App image after install from Google Play

The 'share icon' doesn't work. It's clickable, but it does nothing. The icon doesn't appear, just the title: "share"

This is the code:

private ShareActionProvider mShareActionProvider;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    // Set up ShareActionProvider's default share intent
    MenuItem shareItem = menu.findItem(R.id.action_share);
    mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem);
    mShareActionProvider.setShareIntent(getDefaultShareIntent());  
    return super.onCreateOptionsMenu(menu);
}

private Intent getDefaultShareIntent() {
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("text/plain");
    intent.putExtra(Intent.EXTRA_SUBJECT, getResources().getString(R.string.app_name));
    intent.putExtra(Intent.EXTRA_TEXT, getResources().getString(R.string.app_play_address));
    return intent;
}

And this is main.xml file:

<menu 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:yourapp="http://schemas.android.com/apk/res-auto">

<item 
    android:id="@+id/action_share"
    android:title="@string/share"
    yourapp:showAsAction="ifRoom"
    yourapp:actionProviderClass="android.support.v7.widget.ShareActionProvider" />

</menu>

In styles.xml file:

<resources>

<!--
    Base application theme, dependent on API level. This theme is replaced
    by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="@style/Theme.AppCompat">
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

styles.xml file in v-11:

<resources>

<!--
    Base application theme for API 11+. This theme completely replaces
    AppBaseTheme from res/values/styles.xml on API 11+ devices.
-->
<style name="AppBaseTheme" parent="@style/Theme.AppCompat">
    <!-- API 11 theme customizations can go here. -->
</style>

styles.xml file in v-14:

<resources>

<!--
    Base application theme for API 14+. This theme completely replaces
    AppBaseTheme from BOTH res/values/styles.xml and
    res/values-v11/styles.xml on API 14+ devices.
-->
<style name="AppBaseTheme" parent="@style/Theme.AppCompat">
    <!-- API 14 theme customizations can go here. -->
</style>

and, finally, on manifest.xml:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
like image 403
Michele Saccomanno Avatar asked Oct 21 '13 15:10

Michele Saccomanno


2 Answers

Are you using Proguard for your releases?

I do, and had the same problem until I realised the class ShareActionProvider gets mangled by Proguard and thus I had to take it out of Proguard-mangling.

So, in your proguard-project.txt, include the following line:

-keep class android.support.v7.widget.ShareActionProvider { *; }
like image 109
arne.jans Avatar answered Oct 07 '22 07:10

arne.jans


Do you have the right permissions in your manifest?

http://developer.android.com/guide/topics/security/permissions.html

like image 26
Max McKinney Avatar answered Oct 07 '22 09:10

Max McKinney