1

私はいくつかのリントエラーを調べていましたが、アクティビティを移行する方法が2つあることに気付きました。

さまざまなインターネットソースから学んだことから、私は常にマニフェストの各アクティビティにアクション名のインテントフィルターを割り当て、そのアクティビティに移動するインテントでそれを呼び出してきました。

ただし、これにより、「エクスポートされたアクティビティには許可は必要ありません」というlintエラーが発生しました。これは奇妙な問題である可能性があり、アクティビティクラスを参照して(startActivity()メソッドを使用して)移動する方がよいと言う人もいます。インテントフィルターの代わりにアクティビティのクラスを呼び出す。

誰かがどちらの方法が良いかを証明できますか?ただし、lintエラーを表示しない方法の方が良いようです...

ありがとう!

4

2 に答える 2

3

推奨されるアプローチは、外部アプリで使用することを意図していない限り、マニフェストにActivity登録済みセクションを含めないことです。<intent-filter>この例は、Intentアクションのようなものを使用して特定のドキュメントのmimeタイプを表示する場合ACTION_VIEWです。これは基本的に暗黙のIntentアクションです。

クラスが独自のアプリのコンポーネントによって内部的にのみ使用されることを意図している場合は、たとえばActivityexpiclitIntentsを使用してのみ開始する必要があります...

Intent myIntent = new Intent(this, MyActivity.class);

この場合、Activity「認識」を開始するアプリコンポーネントは、実行したいことを認識し、それを実行するための特定のコンポーネントを開始Activityします。

于 2012-08-14T23:55:29.937 に答える
0

もう1つの方法は、BroadcastReceiverを使用してインテントを処理することです。それは順番にあなたの活動を開始します。ブロードキャストレシーバーからstartActivity()を実行します。したがって、ブロードキャストレシーバーでフィルターを使用するとインテントが取得されますが、ブロードキャストレシーバーはstartActivityを使用して対応するアクティビティを開始します。したがって、この状況では実際にはその組み合わせですが、クラス名でターゲットにするのではなく、インテントをブロードキャストする必要があります。アプリがシンプルな場合は、別のアクティビティからActivity(intent)を開始できます。ただし、アクティビティにフィルタを登録しないでください。私はこの答えが群衆のお気に入りではないことを知っていますが、それは緩い結合、または関心の分離などと呼ばれています。

于 2012-08-15T00:24:02.350 に答える