2014年6月4日水曜日

AndroidでTwitter公式の投稿Activityを取得(新旧バージョン対応)

前回Androidアプリからツイートする4つの方法を紹介しましたが、その中でPackageManagerを利用してピンポイントで公式クライアントアプリを呼び出す方法を紹介しました
しかし、この方法は呼出し時に投稿に使われるActivityまで指定しなければならないため、公式クライアントの更新により変更されてしまった場合使えなくなります
実際過去2回ほどありました
ここではその2回の変更に対応してユーザーの公式クライアントが古いバージョンの場合にも対応できる方法を紹介します

  public static String getTwitterClass(Context context) {
    String twitterClass = null;
    PackageManager pm = context.getPackageManager();
    String packagename = "com.twitter.android";
    String class1 = "com.twitter.android.PostActivity";
    String class2 = "com.twitter.applib.composer.TextFirstComposerActivity";
    String class3 = "com.twitter.android.composer.TextFirstComposerActivity";
    try {
      ActivityInfo[] activities = pm.getPackageInfo(packagename, PackageManager.GET_ACTIVITIES).activities;
      for(int i = 0; i < activities.length; i++) {
        if (activities[i].name.equals(class1)) {
          twitterClass = class1;
          break;
        } else if (activities[i].name.equals(class2)) {
          twitterClass = class2;
          break;
        } else if (activities[i].name.equals(class3)) {
          twitterClass = class3;
          break;
        }
      }
    } catch (PackageManager.NameNotFoundException e) {
      //Twitter is not install
    }
    return twitterClass ;
  }
※Twitter バージョン5.8.0対応

内容はいたって簡単で、パッケージ名は不変なので"com.twitter.android"でGET_ACTIVITIESによりActivityの一覧を取得して、既知の3つのActivity名と照合します
あとはこれで取得したActivity名を
intent.setClassName("com.twitter.android", 取得Activity名);
とセットして明示的インテントで呼べばオッケーです

0 件のコメント:

コメントを投稿