1

パッケージ名は同じだがパッケージ ID が異なる (gradle 構成で設定された) 2 つのアプリがあります。

アクティビティは、両方のアプリで同じインテントのアクション文字列を設定することで開始されます。

これは、両方のアプリを同じデバイスにインストールしている場合、アクティビティを開始するComplete action using..と、アクションを完了するアクティビティを選択するようユーザーに求めるダイアログが表示されることを意味します。

私の質問は、マニフェスト ファイル内の文字列自体を変更せずにそれらを分離する方法 (複数のモジュールが原因で多くの場合) とstartActivity()、コードベースでそれ自体を使用する前にアクション文字列を設定して、アクションが制限されるようにする方法です。現在のアプリのみ?

更新 #1:intent.setPackage()代わりにアプリケーション ID を使用することに近いものはありますか?

4

2 に答える 2

1

あなたの質問を誤解していない場合は、以下のコードでアーカイブできます。

// start exactly component
Intent intent = new Intent();
intent.setComponent(new ComponentName("yourPackageId", "yourPackageName.MainActivity"));
startActivity(intent);

//or you want to start launcher intent
Intent intent = getActivity().getPackageManager().getLaunchIntentForPackage("yourPackageId");

ここで説明されているようにandroid:exportedMainActivityがあることを確認する必要があります。android:exported = true

他のアプリケーションのコンポーネントによってアクティビティを起動できるかどうか — 起動できる場合は「true」、起動できない場合は「false」。「false」の場合、アクティビティは、同じアプリケーションのコンポーネントまたは同じユーザー ID を持つアプリケーションによってのみ起動できます。

于 2016-06-30T06:44:55.630 に答える
1

現在の状態でそれに取り組むための最短の方法は次のとおり
android:exported = "false"です。Androidマニフェスト設定で宣言されたすべてのアクティビティに対して、アクションを含むインテントフィルターです。
こちらを参考にチェック

私は、GCM の放送受信機やその他のバックグラウンド サービス全般の場合にも同様のことを行っているという事実を見落としていました。

これは、より緊密な統合のために両方のアプリで行う必要があります。

于 2016-06-30T08:54:18.367 に答える