2

このチュートリアルのおかげで: http://mobile.tutsplus.com/tutorials/android/android-sdk-implement-a-share-intent/メッセージを簡単に共有する方法を知っています: インテントを作成してアクティビティを開始するだけです。ただし、startActivity 呼び出しと共有ウィンドウの効果的な表示の間には少し待ち時間があるため、たとえば、そのタイプの共有に適したアプリのリストビューを使用してカスタム アクティビティを作成したいと考えています。

したがって、次のものが必要です。

編集: 1) インテントを処理できるアプリのリストを取得する方法。私の場合は、テキスト/プレーン MIME タイプの ACTION.SEND インテントです。

2)メッセージの本文と件名でそれらを開始する方法。

4

1 に答える 1

4

インストールされているアプリケーションのリストを取得します。

final PackageManager pm = getPackageManager();

List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo packageInfo : packages) {

   Log.d(TAG, "Installed package :" + packageInfo.packageName);
   Log.d(TAG, "Launch Activity :" + pm.getLaunchIntentForPackage(packageInfo.packageName)); 

   }// the getLaunchIntentForPackage returns an intent that you can use with startActivity() 
}

そのパッケージを起動するには:

protected void launchApp(String packageName) {
    Intent mIntent = getPackageManager().getLaunchIntentForPackage(packageName);
    if (mIntent != null) {
        try {
            startActivity(mIntent);
        } catch (ActivityNotFoundException err) {
            Toast t = Toast.makeText(getApplicationContext(),
            "Application not found", Toast.LENGTH_SHORT);
            t.show();
        }
    }
}

編集

このメソッドは、指定されたアクションでインテントに応答できるインストール済みパッケージをパッケージ マネージャーに照会します。

public static boolean isIntentAvailable(Context context, String action) {
    final PackageManager packageManager = context.getPackageManager();
    final Intent intent = new Intent(action);
    List<ResolveInfo> list =
    packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
    return list.size() > 0;
}

特定のアプリケーション (ACTION_SEND を処理できる) を使用してテキストを共有するには:

ResolveInfo info = list.get(index);
Intent intent = new Intent(android.content.Intent.ACTION_SEND);
intent.setClassName(info.activityInfo.packageName, info.activityInfo.name);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, body);
((Activity)context).startActivity(intent);
于 2012-10-01T08:23:28.453 に答える