質問: Activityを起動するかしないかフィルタリングしたいです。 onCreateでfinishするのもダメで、それより前にActivityの起動を阻止したいです。 一瞬で終了ではなく、そもそもActivityの開始自体を事前にフィルタリングして 状況に応じて阻止したいです。 なんとなく Application でできるかなとも思いましたが無理でした。 なにか方法はありませんか? 実際やりたいことは、特定のスキームを無効化したいので、intent filterで横取りしたいのですが、とにかく一瞬足りともActivityを起動したくありません。 スタックが入れ替わってしまってcurrentのアクティビティが背後に入ってしまうからです。 なのでServiceでintent filterでスキームを受け取ろうと思いましたが、 スキームはActivityしか受け取れないようです。 なので、マニフェストではActivityでスキームを受け取るように書いておいて、 実際はそのアクティビティがコールされる前に阻止できればと思いました。 なんかゴチャゴチャなりましてすいません... 追記 もう必要なくなったのですがなぜこのようなことを実現したいかというと、 UFJのアプリ知ってますか? 今は改善されましたが長い間以下のようなうざい事をしてくれたのでUFJアプリからユーザーのご機嫌を維持するアプリを作ろうと思ってました。 UFJアプリが行っていた事 ・開発者モードがONかUSBデバッグがONになっているときとにかくUSBを接続すると 勝手にブラウザを表示して警告を表示する。 (どんなときでもUSBをつなぐ度に勝手にブラウザを表示するのでとにかく迷惑) この動作をブロックしたかったです。 そのため、UFJが発行するブラウザ起動インテントをオーバーライドというか、吸収するため、 そのURIを自分のアクティビティが横取りします。 しかし、仕組み上、今度は必ず自分のアクティビティが起動してしまいます。 自分のアクティビティを即終了してもユーザーが起動していたアプリはバックグラウンドに移動し、ホームに戻ってしまいます。 なので阻止出来てもユーザーのアプリが中断されるという問題は解決できませんでした。 サービスでインテントを吸収できればよかったのですが、この手のインテントはアクティビティしか吸収できなかったのです。
回答: > > 特定のスキームを無効化したい > > > というユースケースがよく分からないのですが、例えば「電話をかける」インテントに反応するアプリを作るには、 `NEW_OUTGOING_CALL` を Activity の intent-filter に仕掛けると思います。 これでユーザーが、「電話をかける」アクションをしたときに、あなたのアプリが選択肢に表示されるわけですが、それを選択しても無反応なのは、ユーザビリティ的に良くないと思います。 どうしてもそうしたい理由が開示できるのであれば、それを書かれた方がアドバイスは集まりやすいと思います。