3

次のコードを使用して、別のアプリから何かをツイートしています。

try{
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.putExtra(Intent.EXTRA_TEXT, "It's a Tweet!" + "#MyApp");
        intent.setType("text/plain");
        final PackageManager pm = getPackageManager();
        final List<?> activityList = pm.queryIntentActivities(intent, 0);
        int len =  activityList.size();
        for (int i = 0; i < len; i++) {
            final ResolveInfo app = (ResolveInfo) activityList.get(i);
            if ("com.twitter.android.PostActivity".equals(app.activityInfo.name)) {
                final ActivityInfo activity=app.activityInfo;
                final ComponentName x=new ComponentName(activity.applicationInfo.packageName, activity.name);
                intent=new Intent(Intent.ACTION_SEND);
                intent.addCategory(Intent.CATEGORY_LAUNCHER);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
                intent.setComponent(x);
                intent.putExtra(Intent.EXTRA_TEXT, "blah blah" );
                startActivity(intent);
                break;
            }
        }
    } catch(final ActivityNotFoundException e) {
        Log.i("Twitter intent", "no twitter native", e );
    }

上記のコードは、Twitter アプリが電話にインストールされていても開いていない場合に完全に機能します。しかし、上記のアクティビティを使用する前に Twitter を使用していた場合、最後に Twitter を離れた場所に転送され、ツイートしたいテキストが投稿されません。これを修正するにはどうすればよいですか?

また、携帯電話に Twitter がインストールされていない場合、何も起こりません。上記のインテントを開始するボタンを押しても何も起こりませんが、実際にメッセージを受け取るべきではありません-Twitterネイティブではありません。メッセージを取得するにはどうすればよいですか??

4

2 に答える 2

2

setComponent の代わりに setClassName を使用する必要があると思います。

  intent.setClassName("com.twitter.android", "com.twitter.android.PostActivity");

ただし、役立つ補足として、Twitter と統合するためのいくつかのオプションがあります。

1) API を使用する (おそらくtwitter4jなどのライブラリを使用する)、または

2) 現在行っているように、Twitter アプリと統合する方法を見つけます。多くの人が Plume や TweetDeck などの他のアプリを使用しており、Twitter がインストールされていないとアプリが機能しないため、これはお勧めできません。

3)単純なインテントを使用してhttp://twitter.com/?status=を開くことができます。これは次のように行うことができます:

  Intent i = new Intent(Intent.ACTION_VIEW);
  i.setData(Uri.parse("http://twitter.com/?status=" + Uri.encode(message)));
  startActivity(i);

2 と 3 を組み合わせることもできます。いくつかの既知の Twitter アプリを試してみて、それらがない場合はブラウザーを呼び出します。

また、アプリが正しいインテントを処理する場合、メソッド 3 がブラウザーの代わりに実際にアプリを起動する可能性があることに注意してください (または、少なくともユーザーに 2 つの選択肢を与える)。

私の意見では、方法 1 はアプリ (ライブラリを除く) にのみ依存し、ユーザーが持っているかどうかに関係なくサードパーティのアプリと統合する必要がないため、最適です。

于 2012-10-16T09:14:09.060 に答える
1

Intent.FLAG_ACTIVITY_CLEAR_TASK の Intent.FLAG_ACTIVITY_NEW_TASK を単純に削除すると、Twitter が実行されているタスクが再開されます。

フラグは次のようになります。

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK
        | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

これが役に立てば幸いです。正しい場合は答えを受け入れることを忘れないでください:)

于 2012-12-19T19:03:33.547 に答える