TransWikia.com

Android Activity起動を阻止する

スタック・オーバーフロー Asked on December 26, 2021

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を自分のアクティビティが横取りします。
しかし、仕組み上、今度は必ず自分のアクティビティが起動してしまいます。
自分のアクティビティを即終了してもユーザーが起動していたアプリはバックグラウンドに移動し、ホームに戻ってしまいます。
なので阻止出来てもユーザーのアプリが中断されるという問題は解決できませんでした。

サービスでインテントを吸収できればよかったのですが、この手のインテントはアクティビティしか吸収できなかったのです。

2 Answers

<activity
    android:name=".TranslucentActivity"
    android:launchMode="singleInstance"
    android:theme="@android:style/Theme.Translucent">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data
            android:host="test.com"
            android:scheme="http" />
    </intent-filter>
</activity>

上記のように、AndroidManifest上でIntentを吸収するActivityを透明に設定後、
onCreateActivity#finish()すれば、あたかも起動していないかのようにできるかと思います。

この場合、ユーザには指定のURLをデフォルト設定をブロッカー用アプリに指定して貰う必要があります。

Answered by nosaka.shin on December 26, 2021

特定のスキームを無効化したい

というユースケースがよく分からないのですが、例えば「電話をかける」インテントに反応するアプリを作るには、 NEW_OUTGOING_CALL を Activity の intent-filter に仕掛けると思います。

これでユーザーが、「電話をかける」アクションをしたときに、あなたのアプリが選択肢に表示されるわけですが、それを選択しても無反応なのは、ユーザビリティ的に良くないと思います。

どうしてもそうしたい理由が開示できるのであれば、それを書かれた方がアドバイスは集まりやすいと思います。

Answered by amay077 on December 26, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP