このときに問題になるのが古いショートカット機能やウィジェットです。
例えばアプリのパッケージが com.example.app で、MainActivity のパッケージも com.example.app だとします。
古いショートカット機能で MainActivity を開くショートカットを作ると、それには次のような Intent がセットされています。
- val intent = Intent(context, MainActivity::class.java)
- // この intent の component は
- // ComponentName("com.example.app", "com.example.app.MainActivity")
Intent の ComponentName に対応する "com.example.app.MainActivity" が無いからです。
そこで activity-alias を使って "com.example.app.MainActivity" が指定されたときは "com.example.app.ui.MainActivity" を指すように alias を定義します。
activity-alias-element
<activity-alias> タグは <application> タグの中で使います。
<activity-alias> の android:targetActivity でこの alias 先の Activity を指定します。この指定先の Activity は <activity-alias> よりも先(上)に <activity> で定義されている必要があります。
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- package="com.example.app">
- <application ...>
- <activity
- android:name=".ui.MainActivity" />
- <activity-alias
- android:name=".MainActivity"
- android:targetActivity=".ui.MainActivity" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity-alias>
- </application>
- </manifest>
0 件のコメント:
コメントを投稿