私はソーシャルネットワーキングアプリを開発しており、ユーザーはInstagramアカウントをサービスに接続できます。 Instagramプロファイルを公式のAndroidアプリ(インストールされている場合)で直接開きたいのですが、それを行う方法が見つかりません。しかし、 ページ iOSのまったく同じ機能に関する開発者向けサイトで、これはAndroidではまったく機能しないようです。ブラウザで。提案はありますか?
次のコードを使用してこの問題を解決しました。
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")));
}
@jhondgeのソリューションは機能し、正しいものですが。これは、これを行うよりクリーンな方法です。
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;
}
ユーザープロファイルにinstagramアプリを直接開くには:
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";
この方法を試してみたところ、うまくいきました。
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")))
}
}
私はwebviewのフラグメントを使用してこれを実装しましたが、1つの問題があります。Instagramのポップアップが3回表示されます:
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;
}
});
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")));
}
}