简体   繁体   中英

Android createChooser appear in front of Activity

I'm hoping one of you fine folk may be able to help me out with a little issue I am having whilst using Android Intent.createChooser(). I am learning as I go with my application so I apologise if I have the wrong end of the stick with how this should work!

I have been following a number of tutorials and have implemented some code which starts an Intent.createChooser() to share a picture to social media. The code that I have used works fine in that I am able to share the picture as I intended, my issue is that when the code is run my main activity (or any activity I call the code from) appears to close and the chooser appears in front of the homescreen or any other applications I may have open. The effect that I was hoping to have, and the one which seemed to be apparent in the tutorials, is for the chooser to appear in front of the running activity (eg as it does for the gallery).

I am using LibGDX meaning that I have had to use an interface to call the android function that executes the chooser code (in my AndroidLauncher java file). The interfaces all work fine but I wasn't sure if that may have a bearing on the way in which this code operates. I have also played around with swapping to a new activity to implement the chooser code, which I had moved from the AndroidLauncher. This had the same end result.

Any advice on how to make the chooser appear in front of my application would be greatly appreciated! The code which implements the createChooser is included below:

public void ShareHandler(){
    String type = "image/*";
    String mediaPath = Environment.getExternalStorageDirectory().getPath()+"/Smile.png";
    createShareIntent(type, mediaPath);
}

private void createShareIntent(String type, String mediaPath)
{
    Intent share = new Intent(Intent.ACTION_SEND);
    share.setType(type);
    File media = new File(mediaPath);
    Uri uri = Uri.fromFile(media);
    share.putExtra(Intent.EXTRA_STREAM, uri);
    startActivity(Intent.createChooser(share, "Share to"));
}

Android Manifest:

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.game"
    android:versionCode="1"
    android:versionName="1.0">

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="25" />

    <uses-permission android:name="android.permission.INTERNET" />


    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/GdxTheme">
        <activity
            android:name=".AndroidLauncher"
            android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
            android:label="@string/app_name"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".FacebookServiceHandler" />

        <meta-data
            android:name="come.facebook.sdk.ApplicationID"
            android:value="@string/facebook_app_id" />

        <provider
            android:name="com.facebook.FacebookContentProvider"
            android:authorities="com.facebook.app.FacebookContentProviderxxxxxxxxxxxxx"
            android:exported="true" />

    </application>

</manifest>

Thanks in advance, Ben.

If

android:name=".FacebookServiceHandler"

is the activity, that handle the social media sharing of the picture, i would expand that to something like this:

<activity
    android:name=".FacebookServiceHandler">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".AndroidLauncher">
    </meta-data>
</activity>

This will tell the programm, that the AndroidLauncher is the parentactivity and should make it appear in front of your activity.

Thank you for the suggestions, I have now solved my issue. It turned out that my code was working correctly all along and the issue I was experiencing was as a result of an exit statement within my Core (LibGDX) java code. Essentially when the startActivity(Intent.createChooser(...)) was called, a dispose function within my core files was also being called. This dispose function contained the exit command and was causing the application to finish.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM