Je développe cette application Android, qui reçoit des données de la galerie (dans mon cas une image) et l'affiche. Ce que je devais aussi faire, c'est créer un SplashScreen pour mon application. Mais quand je l'ai fait, mon intention est devenue nulle.

Code manifeste:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.xkbc1923.myapplication">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity android:name=".SplashScreen">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

    </activity>
    <activity android:name=".AlertExampleActivity">
        <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
            <data android:mimeType="text/*" />
        </intent-filter>
    </activity>
</application>

Écran de démarrage

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;

public class SplashScreen extends Activity {
private static final int DISPLAY_DURATION = 1000;
@Override
protected final void onCreate(final Bundle savedInstState) {
    super.onCreate(savedInstState);
    setContentView(R.layout.activity_splashscreen);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent i = new Intent(SplashScreen.this, AlertExampleActivity.class);
            startActivity(i);
            // close this activity
            finish();
        }
    }, DISPLAY_DURATION);
}
}

Activité principale

import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
import static android.provider.CalendarContract.CalendarCache.URI;
public class AlertExampleActivity extends AppCompatActivity {
ImageView picView;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    ///get the image view
    //get the text view
    setContentView(R.layout.activity_alert_example);

    picView = (ImageView) findViewById(R.id.picture);
    TextView txtView = (TextView) findViewById(R.id.txt);

    if (txtView ==null) {
        Log.w("Example", "TextView is null");
    }

    //get the received intent
    Intent receivedIntent = getIntent();
    //get the action
    String receivedAction = receivedIntent.getAction();
    //find out what we are dealing with
    String receivedType = receivedIntent.getType();
    //make sure it's an action and type we can handle
    if (receivedAction.equals(Intent.ACTION_SEND)) {
        Log.d("Example", "Send received");
        //content is being shared
        if (receivedType.startsWith("text/")) {
            Log.d("Example", "Text received");

            //handle sent text
            //hide the other ui item
            picView.setVisibility(View.GONE);
            //get the received text
            String receivedText = receivedIntent.getStringExtra(Intent.EXTRA_TEXT);
            //check we have a string
            if (receivedText != null) {
                //set the text
               txtView.setText(receivedText);
            }
        } else if (receivedType.startsWith("image/")) {
            Log.d("Example", "Image received");
            //handle sent image
            handleSendImage(receivedIntent);
        }

    } else if (receivedAction.equals(Intent.ACTION_MAIN)) {
        //app has been launched directly, not from share list
        Log.d("Example", "Direct launch of App");
    }
}

private void handleSendImage(Intent intent) {
    // Get the image URI from intent
    Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
    // When image URI is not null
    if (imageUri != null) {
        // Update UI to reflect image being shared
        picView.setImageURI(imageUri);
    } else{
        Toast.makeText(this, "Error occured, URI is invalid", Toast.LENGTH_LONG).show();
    }
}
}
1
Dgaygui Sarah 19 avril 2017 à 16:42

3 réponses

Meilleure réponse

Vous n'avez pas ajouté de données supplémentaires à votre intention. Ce serait donc nul normalement. Ajoutez simplement les données nécessaires à Intent (i) sur SplashScreen.java. Ex -

i.setAction("action"); 
i.setType("type");
i.putExtra("key", "value");
0
AGM Tazim 19 avril 2017 à 14:24

Je ne sais pas si cela résoudra votre problème mais vous pouvez essayer.

Au lieu de :

Intent i = new Intent(SplashScreen.this, AlertExampleActivity.class);
            startActivity(i);
            // close this activity
            finish();

Essaye ça:

startActivity(new Intent(SplashScreen.this, AlertExampleActivity.class));
finish();
0
Johny 19 avril 2017 à 13:53

J'ai changé le fichier manifeste car je veux que l'écran de démarrage apparaisse même lorsqu'il est appelé en externe.

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

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

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".AlertExampleActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>



    </activity>

    <activity android:name=".SplashScreen">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
            <data android:mimeType="text/*" />
        </intent-filter>

    </activity>

</application>

Et changé le SplashscreenActivity:

 public class SplashScreen extends Activity {

private static final int DISPLAY_DURATION = 1000;

@Override
protected final void onCreate(final Bundle savedInstState) {
    super.onCreate(savedInstState);
    setContentView(R.layout.activity_splashscreen);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent i = new Intent(SplashScreen.this, AlertExampleActivity.class);

            i.setAction(Intent.ACTION_SEND);
            i.setType("*/*");
            String[] mimetypes = {"image/*", "video/*"};
            i.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
            startActivity(i);

            // close this activity
            finish();
        }
    }, DISPLAY_DURATION);
}
}

Je n'ai rien changé dans MainActivity, mais maintenant je ne reçois plus l'image ... Je suis nouveau sur Android donc j'apprécierais vraiment l'explication.

0
Dgaygui Sarah 20 avril 2017 à 07:24