web-dev-qa-db-fra.com

Comment forcer son intention d'ouvrir une application spécifique?

J'aime l'intention de partage, il est parfait pour ouvrir les applications de partage avec des paramètres d'image et de texte.

Mais maintenant, je recherche la manière de forcer l'intention de pouvoir ouvrir une application spécifique à partir de la liste, avec les paramètres donnés à l'intention de partage.

Ceci est mon code actuel, il affiche la liste des applications de partage installées sur le téléphone. S'il vous plaît, Somedone peut-il me dire ce que je devrais ajouter au code pour forcer par exemple l'application officielle Twitter? et application officielle facctbok?

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
Uri screenshotUri = Uri.parse("file:///sdcard/test.jpg");  
sharingIntent.setType("image/*");
sharingIntent.putExtra(Intent.EXTRA_TEXT, "body text");
sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
startActivity(Intent.createChooser(sharingIntent, "Share image using"));

Merci

24

Pour Facebook

public void shareFacebook() {
        String fullUrl = "https://m.facebook.com/sharer.php?u=..";
        try {
            Intent sharingIntent = new Intent(Intent.ACTION_SEND);
            sharingIntent.setClassName("com.facebook.katana",
                    "com.facebook.katana.ShareLinkActivity");
            sharingIntent.putExtra(Intent.EXTRA_TEXT, "your title text");
            startActivity(sharingIntent);

        } catch (Exception e) {
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setData(Uri.parse(fullUrl));
            startActivity(i);

        }
    }

Pour Twitter.

public void shareTwitter() {
        String message = "Your message to post";
        try {
            Intent sharingIntent = new Intent(Intent.ACTION_SEND);
            sharingIntent.setClassName("com.Twitter.Android","com.Twitter.Android.PostActivity");
            sharingIntent.putExtra(Intent.EXTRA_TEXT, message);
            startActivity(sharingIntent);
        } catch (Exception e) {
            Log.e("In Exception", "Comes here");
            Intent i = new Intent();
            i.putExtra(Intent.EXTRA_TEXT, message);
            i.setAction(Intent.ACTION_VIEW);
            i.setData(Uri.parse("https://mobile.Twitter.com/compose/Tweet"));
            startActivity(i);
        }
    }
38
Xorsat

Il y a un moyen plus générique de le faire et n'est pas nécessaire de connaître le nom complet du package de l'intention de l'application.

Voir ce message: Comment personnaliser l'intention de partage dans Android?

7
Derzu

solution de travail à 100%

si vous souhaitez partager quelque chose dans n'importe quelle application, vous souhaitez ou ouvrez une URL via chaque action, utilisez simplement cette méthode:

private void shareOrViewUrlViaThisApp(String appPackageName, String url) {
    boolean found = false;
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse(url));

    List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(intent, 0);
    if (!resInfo.isEmpty()){
        for (ResolveInfo info : resInfo) {
            if (info.activityInfo.packageName.toLowerCase().contains(appPackageName) ||
                    info.activityInfo.name.toLowerCase().contains(appPackageName) ) {

                intent.setPackage(info.activityInfo.packageName);
                found = true;
                break;
            }
        }
        if (!found)
            return;

        startActivity(Intent.createChooser(intent, "Select"));
    }
}

et simplement appeler:

shareOrViewUrlViaThisApp(<your package name>,<your url>);

Cette réponse a été inspirée de - Ceci .

3