Je développe une application de réseautage social et nos utilisateurs peuvent connecter leur compte Instagram à notre service. J'aimerais ouvrir les profils Instagram directement dans leur Android Android (si elle est installée), mais je ne trouve aucun moyen de le faire. Cependant, il y a un page sur leur site de développeur à propos de la même fonctionnalité exacte sur iOS, mais cela ne semble pas du tout fonctionner sur Android. Tout ce que j'ai trouvé sur le Web ne suggère que différentes façons d'ouvrir des liens dans un navigateur. Des suggestions?
J'ai résolu ce problème en utilisant le code suivant.
Uri uri = Uri.parse("http://instagram.com/_u/xxx");
Intent likeIng = new Intent(Intent.ACTION_VIEW, uri);
likeIng.setPackage("com.instagram.Android");
try {
startActivity(likeIng);
} catch (ActivityNotFoundException e) {
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("http://instagram.com/xxx")));
}
Bien que la solution de @ jhondge fonctionne et soit correcte. C'est une façon plus propre de procéder:
Uri uri = Uri.parse("http://instagram.com/_u/xxx");
Intent insta = new Intent(Intent.ACTION_VIEW, uri);
insta.setPackage("com.instagram.Android");
if (isIntentAvailable(mContext, insta)){
startActivity(insta);
} else{
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://instagram.com/xxx")));
}
private boolean isIntentAvailable(Context ctx, Intent intent) {
final PackageManager packageManager = ctx.getPackageManager();
List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
Pour ouvrir directement l'application instagram sur un profil utilisateur:
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";
J'ai essayé de cette façon et cela a fonctionné pour moi ..
instabtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent instaintent = getActivity().getPackageManager().getLaunchIntentForPackage("com.instagram.Android");
instaintent.setComponent(new ComponentName( "com.instagram.Android", "com.instagram.Android.activity.UrlHandlerActivity"));
instaintent.setData( Uri.parse( "https://www.instagram.com/_u/bitter_truth_lol") );
startActivity(instaintent);
}
});
fun getOpenInstagram(context: Context, url: String) {
val likeIng = Intent(Intent.ACTION_VIEW, Uri.parse("http://instagram.com/_u/$url"))
likeIng.setPackage("com.instagram.Android")
try {
context.startActivity(likeIng)
} catch (e: ActivityNotFoundException) {
context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("http://instagram.com/$url")))
}
}
J'ai implémenté cela en utilisant un fragment dans la vue Web, mais j'ai un problème, le pop-up instagram apparaît trois fois:
webView.setWebViewClient(new WebViewClient()
{
public boolean shouldOverrideUrlLoading(WebView viewx, String urlx)
{
if(Uri.parse(urlx).getHost().endsWith("instagram.com")) {
gotoinstagram();
return false;
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlx));
viewx.getContext().startActivity(intent);
return true;
}
});
en dehors de onCreateView
public void gotoinstagram()
{
Uri uri = Uri.parse("http://instagram.com/_u/XXXX");
Intent likeIng = new Intent(Intent.ACTION_VIEW, uri);
likeIng.setPackage("com.instagram.Android");
try {
startActivity(likeIng);
} catch (ActivityNotFoundException e) {
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("http://instagram.com/XXXX")));
}
}