Pocket の開発者の方なのかな.
以下のような記述のみで「About Page」が作成できるようです.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View aboutPage = new AboutPage(this)
.isRTL(false)
.setImage(R.drawable.dummy_image)
.addGroup("Connect with us")
.addEmail("elmehdi.sakout@gmail.com")
.addFacebook("the.medy")
.addTwitter("medyo80")
.addYoutube("UCdPQtdWIsg7_pi4mrRu46vA")
.addPlayStore("com.ideashower.readitlater.pro")
.addInstagram("medyo80")
.addGitHub("medyo")
.create();
setContentView(aboutPage);
}
medyo/android-about-page: Create an awesome About Page for your Android App in 2 minutes
こんなかんじになります.
下の方の各アイテムをタップすると, 作成されたそれぞれの Intent で startActivity されるわけですが.
mContext.startActivity(element.getIntent());
どんな Intent なのか見てみましょう.
メール
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("message/rfc822");
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{email});
Facebook
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
if (AboutPageUtils.isAppInstalled(mContext, "com.facebook.katana")){
intent.setPackage("com.facebook.katana");
int versionCode = 0;
try {
versionCode = mContext.getPackageManager().getPackageInfo("com.facebook.katana", 0).versionCode;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (versionCode >= 3002850) {
Uri uri = Uri.parse("fb://facewebmodal/f?href=" + "http://facebook.com/" + id);
intent.setData(uri);
} else {
Uri uri = Uri.parse("fb://page/"+id);
intent.setData(uri);
}
}else{
intent.setData( Uri.parse("http://facebook.com/" + id));
}
Facebookアプリを入れている場合は, そのバージョンのよってセットする Uri を分けているようです.
Twitter
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
if (AboutPageUtils.isAppInstalled(mContext, "com.twitter.android")){
intent.setPackage("com.twitter.android");
intent.setData(Uri.parse(String.format("twitter://user?user_id=%s",id)));
}else{
intent.setData(Uri.parse(String.format("http://twitter.com/%s",id)));
}
Play Store
Uri uri = Uri.parse("market://details?id=" + id);
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
YouTube
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(String.format("http://youtube.com/channel/%s", id)));
if (AboutPageUtils.isAppInstalled(mContext, "com.google.android.youtube")){
intent.setPackage("com.google.android.youtube");
}
Instagram
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://instagram.com/_u/"+id));
if (AboutPageUtils.isAppInstalled(mContext, "com.instagram.android")){
intent.setPackage("com.instagram.android");
}
GitHub
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setData(Uri.parse(String.format("https://github.com/%s", id)));
まとめ
ユーザに, ブラウザで開くか, アプリで開くか, の選択の余地を与えず, インストールしているかの判断の後, パッケージ指定で独自スキームの Uri を渡して投げる, てのが今のやり方か.
それがおまえらのやり方か!!