スマホアプリ開発つまずきポイント:暗黙的intentのマニフェスト記載~金宏和寛「作ればわかる!Androidプログラミング」

  金宏和寛著「作ればわかる!Androidプログラミング」で、スマーホアプリを勉強中です。最新版で対応していない部分について、修正方法を記します。
 今回は、第6章で発生した、暗黙的インテントの実行に関わる不具合です。

 ※使用環境:2021年12月時点(Android Studio Arctic Fox 2020.3.1 Patch 4)API31
20211209za35.jpg


★Kotlinバージョンアップで、プログラムが動かない!
スマホアプリの作成に挑戦中です。以下の書籍に沿って、学んでいます(購入時の記事は、→こちら)。
・金宏和寛著:作ればわかる!Androidプログラミング・Kotlin対応~10の実践サンプルで学ぶAndroidアプリ開発入門、2019/6、翔泳社
20211209za01.jpg

 開発環境の導入から、プログラミング、実機への導入まで、ひととおりの手順が書かれていて、とても分かりやすく実用的な書籍です。ただ、残念なことに、一部のソースコードが、そのままでは動きません。2019年6月の発刊であり、現在までに開発言語「Kotlin(コトリン)」が何度もバージョンアップされていることが原因です。

 2021年12月時点の環境(Android Studio Arctic Fox 2020.3.1 Patch 4 API31 Platform)で動作するように、修正をしながら試しています。解決した部分は、当ブログに書きます。同様のエラーでお困りの方に、お役に立てば幸いです。(勉強中の人が書いています。ご指摘などありましたら、ぜひコメントください。)


★第6章:暗黙的intentが実行されない

◎使用環境
・開発環境:Android Studio Arctic Fox 2020.3.1 Patch 4 / API31 Platform
・実機:スマートフォン OPPO CPH2099

◎不具合発生箇所
・対象コード:第6章 p.195 リスト6.5 MainActivity.kt

◎発生状況
・「intent.resolveActivity(packagemanager)」の行で、「resolveActivity」が警告ハイライト表示される(下図)。
・実機で実行しても、メール送信・SMS送信ともアプリ起動されない(メニュー選択後、無反応)。
20211220z6a102.jpg

◎原因
・仕様変更により、使用するintentの内容をマニフェストに明示することが必要になった。

◎対策
 マニフェストファイル「AndroidManifest.xml」を開きます。下図のように、「queris(クエリ)」の「intent」内で、宣言文を追加します。

<queries>
  <intent>
    <action android:name="android.intent.action.SENDTO" />
    <data
      android:host="*"
      android:scheme="mailto" />
  </intent>
  <intent>
    <action android:name="android.intent.action.SENDTO" />
    <data
      android:host="*"
      android:scheme="smsto" />
  </intent>
</queries>

20211220z6a101.jpg

 上の追加部分について、説明します。「resolveActivity()」は、暗黙のintentを実行する前に、実機で扱えるアプリの種類を調査するメソッドです。書籍発行時に対して、最新Androidでは、この調査範囲をマニフェスト内で指定する必要があるように、仕様変更されています。このため、マニフェストの「queries」「intent」を追加する必要があります。サンプルプログラムでは、「mailto」と「smsto」の2種類の命令(uriに記載)を実行するため、それぞれについて、intent文を記載しています。

 以上の修正によって、「resolveActivity」の警告表示が解消されました。また、画像の長押しメニューから、メールやSMSアプリを起動できる(画面が対象アプリに遷移する)ようになりました。
20211220z6a104.jpg


 なお、上のコードでは、動作確認のために、もしintentが実行できない(調査の結果、対応アプリが見つからない)ときには、「アプリがみつかりません」というメッセージを返すようにしました。マニフェストの修正内容が正しければ、このメッセージが表示されることはありません。
...
}else{
   binding.menuTxt.text="アプリがみつかりません"
}
...


◎補足:ツールバーの色設定
 動作エラーにはなりませんが、テキストp.169・ツールバーの色設定について、仕様変更がありました。テキストでは、「colors.xml」の編集のみが示されていますが、現状環境では、「colors.xml」「themes.xml」の2ファイルの編集が必要です。「colors」で使う色を定義して、「themes」で各パーツに色を割り当てる流れです。例えば、下図のように編集が必要です。(テキストでは赤系の色を選んでいますが、下コードでは緑系を選びました。)

★colors.xml
<color name="green_500">#FF449944</color>
<color name="green_700">#FF006600</color>

★themes.xml
<item name="colorPrimary">@color/green_500</item>
<item name="colorPrimaryVariant">@color/green_700</item>

20211220z6a801.jpg



◎補足2:bindingによるview参照
 完全動作のためには、上に加えて、「Android-Kotlin拡張プラグイン」廃止対応として、「binding」を用いる修正が必要です。詳しい修正方法は、別記事(→こちら)を参照ください。



 これにて完動!
  20211209za35.jpg 20211209za36.jpg

Comments

Popular posts from this blog

Privacy Policy: LifePointer - a life counter for TCGs

Privacy Policy: Absolute FFT - visualize frequency of sounds

Privacy Policy: Head or Tail? - An App for Tossing Coins