this Android question を参照として使用して、URIからSOアプリを起動しようとしています。
次の宣言されたアクティビティを含むマニフェストファイルがあります。
<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の質問を調べましたが、すべてのソリューションが機能していないようです。
警告を回避するために、アクティビティインテントフィルタを正しく作成するにはどうすればよいですか?
ありがとう
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」です。
"エクスポートされた受信者は許可を必要としません"(少なくともLINTメッセージは明確です)なので、あなたはそれを得ました。
プロジェクトをクリーンアップしようとしましたか(プロジェクト>クリーン...)?私のプロジェクトでこの警告を修正しました。おそらくあなたのものです。
この警告を取り除くには、2つの選択肢があります。
Android:exported="false"
をに設定して、他のアプリがインテントを介してActivityを呼び出さないようにするAndroid:permission
属性を追加する必要がありますアクティビティを呼び出すために必要です。詳細については、 Androidドキュメント をご覧ください。
リンクについて @ furykid に感謝します。