2017-02-01 3 views
1

Ich hoffe, dass einer von euch feine Leute in der Lage sein kann, mir mit einem kleinen Problem zu helfen, das ich mit Android Intent.createChooser() habe. Ich lerne, während ich mit meiner Anwendung gehe, also entschuldige ich mich, wenn ich das falsche Ende des Stocks habe mit wie das funktionieren sollte!Android CreateChooser erscheint vor Aktivität

Ich habe eine Reihe von Tutorials verfolgt und Code implementiert, der eine Intent.createChooser() startet, um ein Bild auf Social Media zu teilen. Der Code, den ich verwendet habe, funktioniert gut, da ich das Bild wie vorgesehen teilen kann. Mein Problem ist, dass beim Ausführen des Codes meine Hauptaktivität (oder irgendeine Aktivität, von der ich den Code nenne) zu schließen scheint und die Auswahl erscheint vor dem Homescreen oder anderen Anwendungen, die ich geöffnet habe. Der Effekt, den ich mir erhoffte, und der, der in den Tutorials offensichtlich zu sein schien, ist, dass der Chooser vor der laufenden Aktivität erscheint (zB wie in der Galerie).

Ich verwende LibGDX, was bedeutet, dass ich eine Schnittstelle verwenden musste, um die Android-Funktion aufzurufen, die den Auswahlcode ausführt (in meiner AndroidLauncher-Java-Datei). Die Schnittstellen funktionieren alle gut, aber ich war mir nicht sicher, ob das einen Einfluss auf die Funktionsweise dieses Codes haben könnte. Ich habe auch mit dem Wechsel zu einer neuen Aktivität herumgespielt, um den Auswahlcode zu implementieren, den ich vom AndroidLauncher verschoben hatte. Dies hatte das gleiche Endergebnis.

Irgendwelche Ratschläge, wie man den chooser vor meiner Anwendung erscheinen lässt, würde sehr geschätzt werden! Der Code, der die createChooser implementiert ist unten enthalten:

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> 

Vielen Dank im Voraus, Ben.

+0

Kannst du die Androidmanifest.xml posten, die wahrscheinlich Dinge klären würde. – Alex

+0

Mit der AndroidManifest.xml wie gewünscht aktualisiert. –

+0

Woher rufst du 'createShareIntent'? Ist das ShareHandler ein android.os.Handler? – Tenfour04

Antwort

-1

Vielen Dank für die Vorschläge, ich habe jetzt mein Problem gelöst. Es stellte sich heraus, dass mein Code die ganze Zeit korrekt funktionierte und das Problem, das ich hatte, war das Ergebnis einer Exit-Anweisung in meinem Core (LibGDX) Java-Code. Im Wesentlichen, wenn die startActivity (Intent.createChooser (...)) aufgerufen wurde, wurde auch eine Dispose-Funktion in meinen Kerndateien aufgerufen. Diese Dispose-Funktion enthielt den Befehl exit und führte dazu, dass die Anwendung beendet wurde.

0

Wenn

android:name=".FacebookServiceHandler" 

die Aktivität ist, dass das Social-Media-Sharing des Bildes handhaben, würde ich das in etwa so erweitern:

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

Dies wird das Programm sagen, dass die AndroidLauncher ist die Elternaktivität und sollte es vor deiner Aktivität erscheinen lassen.

+0

Danke für die schnelle Antwort Alex. Tut mir leid, ich hätte dieses Teil wahrscheinlich entfernen sollen. FacebookService Handler ist von einer anderen Aktivität, mit der ich spielte. Die eigentliche Absicht wird direkt von AndroidLauncher implementiert. Nachdem dies gesagt wurde, werde ich versuchen, was Sie oben vorgeschlagen haben, indem Sie die Absicht in einer anderen Aktivität implementieren, da es die Antwort sein könnte. Ich werde berichten, sobald ich es versucht habe –

Verwandte Themen