しかし、この方法は呼出し時に投稿に使われる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 件のコメント:
コメントを投稿