0

アプリから何かをツイートするための次のコードがあります。

try {
            Intent intent = new Intent(Intent.ACTION_SEND);
            intent.setType("text/plain");
            intent.putExtra(Intent.EXTRA_TEXT,
                    "Blah blah blah");
            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)) {
                    intent.addCategory(Intent.CATEGORY_LAUNCHER);
                    intent.setClassName("com.twitter.android",
                            "com.twitter.android.PostActivity");

                    startActivity(intent);
                    break;
                }
            }
        } catch (final ActivityNotFoundException e) {
            onCreateDialog(NO_APP);
        }

protected Dialog onCreateDialog(int id) {
    Dialog dialog;
    switch (id) {

    case NO_APP: {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setIcon(R.drawable.icon_small);
        builder.setTitle("Twitter");
        builder.setMessage("No Twitter app found");
        builder.setCancelable(false);
        builder.setPositiveButton("OK", new Dialog.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
                finish();
            }
        });

        dialog = builder.create();
        return dialog;
    }
    default:
        return super.onCreateDialog(id);
    }
}

Twitterが私の電話にインストールされている場合、アプリは正常に動作し、新しいツイートが生成されます。アプリが存在しない場合は、アプリがないことを示すダイアログを表示したいと思います。ただし、現時点では、電話にTwitterアプリがない場合は何も起こりません。アプリのツイートボタンを押しても何も起こりません。この場合、ダイアログを表示するにはどうすればよいですか?

4

1 に答える 1

1

twitter アプリケーションが見つからない場合も例外ではありません。コードを次のように変更します。

try {
boolean found = false;
            Intent intent = new Intent(Intent.ACTION_SEND);
            intent.setType("text/plain");
            intent.putExtra(Intent.EXTRA_TEXT,
                    "Blah blah blah");
            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)) {
found = true;
                    intent.addCategory(Intent.CATEGORY_LAUNCHER);
                    intent.setClassName("com.twitter.android",
                            "com.twitter.android.PostActivity");

                    startActivity(intent);
                    break;
                }
            }
if(!found)  onCreateDialog(NO_APP);
        } catch (final ActivityNotFoundException e) {
            onCreateDialog(NO_APP);
        }

または、Twitter アプリケーションを起動して、not found 例外を処理してみてください。

try {

            Intent intent = new Intent();
            intent.addCategory(Intent.CATEGORY_LAUNCHER);
            intent.setClassName("com.twitter.android", "com.twitter.android.PostActivity");
            startActivity(intent);

        } catch (final ActivityNotFoundException e) {
            onCreateDialog(NO_APP);
        }
于 2012-10-24T07:57:43.187 に答える