許す、
ここでの問題は、明らかにAndroidアプリケーションモデルの誤解です。Commonswareは、この問題を解決する方法について完全に正しいです。ただし、Androidの基本を理解していなくても、Androidの適用が難しい理由がわかります。だから、簡単な説明:
Androidのすべてのアクションは、インテントで始まります。これは特にアクティビティに当てはまります。すべてのアクティビティにはインテントがあります。開発者がインターフェイスを使いやすくするために、OSからインテントに応答するか、Activitiesクラスからインテントを作成して使用することができます。一般に、最初のオプションを実行することをお勧めします。
インテントへの対応
応答するインテントを選択するときは、文字通り任意のインテントに応答できます。これはアクションと呼ばれます。「FOO」というインテントを作成した場合、バーアクティビティはそれを取得して応答する可能性があります。ただし、規則がありますが、その主な目的は、作成したインテントの前にパッケージ名を追加することです。たとえば、「com.company.package.FOO」。簡単に言えば、これは他のアプリとの衝突を避けるためです。
すべてのアクティビティは、さまざまなイベントに応答する場合があります。これはAndroidManifest.xmlで定義されています。
<activity android:name="Activity3" ... >
<intent-filter>
<action android:name="com.company.package.FOO"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
上記では、カテゴリもDEFAULTに設定しているため、ユーザーが変更しない限り、カスタムインテントに応答する唯一のアプリになります。次にインテントを呼び出す方法は、作成した同じ名前(つまり、「com.company.package.FOO」)を使用することです。
startActivity(new Intent("com.company.package.FOO"));
それがどのように機能するかです!上記の「com.company.package.FOO」をパッケージ名(アプリケーションで定義)と意味のあるものに変更するだけです。例は「com.testapp.ws.SWAT_FLIES」です。
コードが機能しない理由
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.testapp.ws");
上記のコードは、特定の種類のインテントアクションを探します。AndroidManifestを作成したときと、最初に行ったアクティビティを覚えておいてください。
<action android:name="android.intent.action.MAIN">
<category android:name="android.intent.category.LAUNCHER">
ええと...getLaunchIntentForPackage()は、その最初のアクティビティのインテントのみを取得します。これが、カスタムインテントを作成する理由です...まず、スタートアップとして3番目のアクティビティにしたくないためです...次に、OSがスタートアップアクティビティのみを通知するためです。独自のアクション(つまり、「com.testapp.ws.SWAT_FLIES」)でそれを伝える必要があります
お役に立てれば、
FuzzicalLogic