hiko1129's note

AndroidでIntent受信時に画面遷移せず(Activityを表示せず)にToastを表示する方法

2019/10/22

初めに 

Android初心者です。

タイトルに画面遷移せずと書きましたが、正しくは「画面を透過させつつビューを表示しないことで画面遷移してないように見せる」って感じだと思います。

AndroidでIntent受信時に画面遷移せず(Activityを表示せず)にToastを表示する方法

下記の対応を行えば可能なようです。

  • AndroidManifest.xmlのactivityのandroid:themeに@android:style/Theme.Translucent.NoTitleBarを使用して透過させる

Intent受信時に使用するActivity

class GetUrlActivity : Activity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        Toast.makeText(applicationContext, "Saved", Toast.LENGTH_SHORT).show()

        // 以下はIntentの処理
        val action = intent.action
        val type = intent.type

        if (Intent.ACTION_SEND == action && type != null) {
            if ("text/plain" == type) {
                val prefs = getSharedPreferences("Article", Context.MODE_PRIVATE)
                val editor = prefs.edit()
                val urls = prefs.getStringSet("urls", hashSetOf<String>())
                urls.add(intent.getStringExtra(Intent.EXTRA_TEXT))

                editor.putStringSet("urls", urls).commit()
            }
        }
    }
}

AndroidManifest.xmlのactivityのandroid:themeに@android:style/Theme.Translucent.NoTitleBarを使用して透過させる

<activity
    android:name=".GetUrlActivity"
    android:launchMode="singleTop"
    android:theme="@android:style/Theme.Translucent.NoTitleBar">
    <!-- android:theme="@android:style/Theme.Translucent.NoTitleBar"を設定 -->
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/*" />
    </intent-filter>
</activity>

終わりに

画面遷移させないものだと思っていたせいで結構時間取られた。
さすがにアプリ開発全く知らないとFlutter触るのまだ少し大変(Flutter触っていた際に遭遇した)。

参考


hiko1129

hiko1129
Twitter GitHub Qiita Qrunch Blog