初めに
Android初心者です。
タイトルに画面遷移せずと書きましたが、正しくは「画面を透過させつつビューを表示しないことで画面遷移してないように見せる」って感じだと思います。
AndroidでIntent受信時に画面遷移せず(Activityを表示せず)にToastを表示する方法
下記の対応を行えば可能なようです。
- AndroidManifest.xmlのactivityのandroid:themeに@android:style/Theme.Translucent.NoTitleBarを使用して透過させる
Intent受信時に使用するActivity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| 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を使用して透過させる
1
2
3
4
5
6
7
8
9
10
11
| <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触っていた際に遭遇した)。
参考