2

私がやりたいことは次のとおりです。

  1. ユーザーは、システムで使用可能なすべてのショートカットのリストからショートカットを選択します。
  2. 関連情報が保存されます。
  3. ユーザーがアクションを実行すると、ホーム画面のアイコンのように、選択したショートカットが実行されます。

これまでのところ、を使用して、すべてのショートカットをリストに入力して表示することができ getPackageManager().queryIntentActivities(new Intent(Intent.ACTION_CREATE_SHORTCUT), 0);ます。ショートカットを選択するとACTION_CREATE_SHORTCUT、ショートカットパラメータをカスタマイズするインテントを開始します。これにより、適切なUIが表示され、機能しているように見えます。このコードを使用してインテントを開始します。

ActivityInfo activity = resolveInfo.activityInfo;
ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
Intent i = new Intent(Intent.ACTION_CREATE_SHORTCUT);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
i.setComponent(name);
startActivityForResult(i, 1);

これが私のonActivityResultです:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode==1 && resultCode == RESULT_OK) {
            try {
                startActivity((Intent) data.getExtras().get(Intent.EXTRA_SHORTCUT_INTENT));
            } catch (Exception e) {             
                e.printStackTrace();
            }
            Toast.makeText(getApplicationContext(), "Success!!", Toast.LENGTH_LONG).show();
            finish();
        }else{
            Toast.makeText(getApplicationContext(), "Fail: "+resultCode+" "+resultCode, Toast.LENGTH_LONG).show();
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

ここで問題となるのは、requestCode = 0、resultCode = 0のonActivityResult直後で、データがない場合は常にトリガーされることです。アクティビティが実際に終了startActivityForResultしたときにトリガーされません。ACTION_CREATE_SHORTCUT本当にわかりません。アクティビティが終了した後、送信したrequestCodeとデータインテントを返す必要があると思います。これには、実際にショートカットを開始するために何らかのIntent.EXTRA_SHORTCUT_INTENT方法で使用できるデータが含まれています。

質問の2番目の部分は、ユーザーが選択したショートカットに必要な情報を実際にどのように保存するかですSharedPreferences。これにより、後で特定のパラメーターを使用してこのショートカットを実行できます。この例は見つかりませんでした。

どんな助けでも大歓迎です!ありがとう!

4

2 に答える 2

3

2年以上後、これが私の質問に対する答えです:

startActivityForResult/システムが適切に機能onActivityResultするかどうかは、呼び出し元のアクティビティと呼び出されたアクティビティの両方が同じタスクの一部であることに明らかに依存します。したがって、2 つのアクティビティが別々のタスクで起動される原因となるアクションは、この機能を壊しますこのようなアクションには、2 つのアクティビティのいずれかを起動するときなどlaunchModeに、 内のいずれかのアクティビティに対して any を排他的に設定すること、またはフラグを使用することが含まれます。AndroidManifest.xmlIntent.FLAG_ACTIVITY_NEW_TASK

ソリューションに対するuser2427931の回答に賛成票を投じましたIntent.parseUri()

于 2015-05-14T10:17:25.747 に答える