37

このSOの質問を参照として使用して、URIからAndroidアプリを起動しようとしています。

次の宣言されたアクティビティを含むマニフェストファイルがあります。

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="http" android:host="example.com" />
    </intent-filter>
</activity>

http://example.comリンクを使用してMainActivityを起動しようとしています。私の問題は、警告が表示されることです

"exported activity does not require permission"

これと同じ警告を報告する他のSOの質問を調べましたが、すべての解決策が機能していないようです。

警告を回避するために、アクティビティインテントフィルターを正しく作成するにはどうすればよいですか?

ありがとう

4

3 に答える 3

93

SDK をバージョン 20に更新したときに同じ問題が発生しました。android:exportedプロパティを追加して削除しました:

<activity 
  android:name=".MainActivity"
  android:exported="false">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="http" android:host="example.com" />
    </intent-filter>
</activity>

マニフェストのアクティビティ宣言内。もちろん、アクティビティがアプリケーション内部での使用のみを目的としている場合は、これを指定できます

それを修正する理由はdocsにあります:

android:exported : デフォルト値は、アクティビティにインテント フィルタが含まれているかどうかによって異なります。フィルターがないということは、正確なクラス名を指定することによってのみアクティビティを呼び出すことができることを意味します。これは、アクティビティがアプリケーション内部での使用のみを目的としていることを意味します (他のユーザーはクラス名を知らないため)。したがって、この場合、デフォルト値は「false」です。一方、少なくとも 1 つのフィルターが存在するということは、アクティビティが外部での使用を意図していることを意味するため、デフォルト値は "true"です。

「Exported receiver does not need permission」 (少なくとも LINT メッセージは明確) であるため、取得済みです。

于 2012-07-17T15:40:28.303 に答える
41

プロジェクトをクリーンアップしようとしましたか([プロジェクト]> [クリーンアップ...])?私のプロジェクト、おそらくあなたのプロジェクトに対するこの警告を修正しました。

于 2012-07-17T14:07:08.490 に答える
18

この警告を取り除くには、次の 2 つの選択肢があります。

  • android:exported="false"アクティビティに属性を設定して、他のアプリがインテントを介してアクティビティを呼び出さないようにするか
  • または、他のアプリがあなたのアクティビティを呼び出すことを許可したい場合は、アクティビティandroid:permissionを呼び出すためにアプリが持つ必要がある権限を指定できる属性を追加する必要があります。
  • 他のアプリが特別な許可なしにあなたのアクティビティを呼び出すことを許可したい場合は、マニフェストに警告を表示する必要があります。

詳細については、Android ドキュメントを参照してください。

リンクを提供してくれた@furykidに感謝します。

于 2012-11-27T21:45:28.663 に答える