Open Instagram User Profile

2019-01-31 03:11发布

问题:

I managed to open the Twitter and Facebook user profile from my app. But I can not find any references to Instagram.

Is There a way to open Instagram in order to show a user profile like in twitter or facebook?

For instance, in order to get the Intent to launch the twitter application I do:

public Intent getOpenTwitterIntent(Context context) {

    try {
        return new Intent(Intent.ACTION_VIEW,
                Uri.parse("twitter://user?screen_name="
                        .concat(twitterUsername)));

    } catch (Exception e) {
        return new Intent(
                Intent.ACTION_VIEW,
                Uri.parse("https://twitter.com/#!/".concat(twitterUsername)));
    }

}

How can I achive something similar with Instagram? Thanks in advance.

回答1:

Here is a method to get the Intent to open the Instagram app to the user's profile page:

/**
 * Intent to open the official Instagram app to the user's profile. If the Instagram app is not
 * installed then the Web Browser will be used.</p>
 * 
 * Example usage:</p> {@code newInstagramProfileIntent(context.getPackageManager(), 
 *     "http://instagram.com/jaredrummler");}</p>
 * 
 * @param pm
 *            The {@link PackageManager}. You can find this class through
 *            {@link Context#getPackageManager()}.
 * @param url
 *            The URL to the user's Instagram profile.
 * @return The intent to open the Instagram app to the user's profile.
 */
public static Intent newInstagramProfileIntent(PackageManager pm, String url) {
    final Intent intent = new Intent(Intent.ACTION_VIEW);
    try {
        if (pm.getPackageInfo("com.instagram.android", 0) != null) {
            if (url.endsWith("/")) {
                url = url.substring(0, url.length() - 1);
            }
            final String username = url.substring(url.lastIndexOf("/") + 1);
            // http://stackoverflow.com/questions/21505941/intent-to-open-instagram-user-profile-on-android
            intent.setData(Uri.parse("http://instagram.com/_u/" + username));
            intent.setPackage("com.instagram.android");
            return intent;
        }
    } catch (NameNotFoundException ignored) {
    }
    intent.setData(Uri.parse(url));
    return intent;
}


回答2:

So far I couldn't find a way to show user's profile directly.. but there is a way around..

Found this solution from Instagram Manifest from GitHub

 Intent iIntent = getPackageManager().getLaunchIntentForPackage("com.instagram.android");

iIntent.setComponent(new ComponentName( "com.instagram.android", "com.instagram.android.activity.UrlHandlerActivity"));
iIntent.setData( Uri.parse( "http://instagram.com/p/gjfLqSBQTJ/") );

startActivity(iIntent);

This will open particular image post by the user in the app. From the page app user can open the profile with the link inside.

If you want to open recent post or something , you can use Instagram API

This is not we want exactly , but the better option now... i guess :)



回答3:

After a brief search and trying what we all know "WON'T WORK" I got this to work

 Uri uri = Uri.parse("http://instagram.com/mzcoco2you");
 Intent intent = new Intent(Intent.ACTION_VIEW, uri);
 startActivity(intent);

This should start your default browser and ... there you go. The answer is "instagram.com" + "/UserName".



回答4:

To open directly instagram app to a user profile :

String scheme = "http://instagram.com/_u/USER";
String path = "https://instagram.com/USER";
String nomPackageInfo ="com.instagram.android";
    try {
        activite.getPackageManager().getPackageInfo(nomPackageInfo, 0);
        intentAiguilleur = new Intent(Intent.ACTION_VIEW, Uri.parse(scheme));
        } catch (Exception e) {
            intentAiguilleur = new Intent(Intent.ACTION_VIEW, Uri.parse(path));
        }
        activite.startActivity(intentAiguilleur); 

// Use this link to open directly a picture
  String scheme = "http://instagram.com/_p/PICTURE";


回答5:

try {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("http://instagram.com/_u/" + "username"));
    intent.setPackage("com.instagram.android");
    startActivity(intent);
    } 
  catch (android.content.ActivityNotFoundException anfe) 
     {
       startActivity(new Intent(Intent.ACTION_VIEW,
       Uri.parse("https://www.instagram.com/" + username)));
     }


回答6:

Unfortunately, at this time you cannot open the Instagram app to go directly to a user profile. You can however open a certain photo in the Instagram app.

The following code that I have provided will open a certain photo inside of the Instagram app. If no Instagram app is installed, it will open a user profile inside of the browser.

public void openInstagram (View view) {
    Intent intent = null;
    String pictureId = "p/0vtNxgqHx9";
    String pageName = "d4v3_r34d";
    try {intent = getPackageManager().getLaunchIntentForPackage("com.instagram.android");
        intent.setComponent(new ComponentName("com.instagram.android", "com.instagram.android.activity.UrlHandlerActivity"));
        intent.setData(Uri.parse("http://instagram.com/" + pictureId));
    } catch (Exception e) {
        intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://instagram.com/" + pageName));
    }
    this.startActivity(intent);

I made it very easy for this code to be edited for your own purposes. Set the "String pictureId" to the id of the picture that you want to display and set the "String pageName" to the user name of your Instagram account.

The user name part is obvious but if you need help to get your picture id look at this picture.