

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

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


CC BY-SA 3.0
2015-09-03T06:20:31.517
15180
2023-06-16T23:04:05.493
2020-02-14T08:55:12.963
3060
10346
question
android android-activity
Android Activity起動を阻止する


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

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

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

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


CC BY-SA 3.0
2016-09-20T07:31:20.570
28997
2016-09-20T07:31:20.570
15190
15180
answer

[code]

    <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>
    
[/code]

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

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


CC BY-SA 3.0
2017-08-31T05:11:29.747
37634
2017-08-31T05:11:29.747
22792
15180
answer