Intro
Quick Start
-
建構並執行應用程式 - Android Developers
若有建立 Android Emulator 則可以直接在 Android Studio 的 Running Devices 列表找到,實體手機則可以透過 USB 或 Wi-Fi 連結裝置以加入列表。使用連結的 Device 執行 Run 後該 Device 就會安裝 apk 並開啟執行
-
Build app for release
Build 出來的 apk 預設檔案目錄:app/build/outputs/apk/
WebView
Quick Start
快速在 onCreate 時就搭建好 WebView:
-
Add a WebView in onCreate()
包含在AndroidManifest.xml
加入 INTERNET permission -
Handle page navigation
OverrideshouldOverrideUrlLoading()
讓 WebView 可以支援 URL 的開啟方式。WebView.context.startActivity(Intent)
用來支援 Intent 開啟 URL,可同時處理 App scheme launch 以及 HTTP URL 外開預設瀏覽器。onCreate -
MainActivity.kt
:class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { ... val myWebView = WebView(this) myWebView.webViewClient = MyWebViewClient() myWebView.settings.javaScriptEnabled = true setContentView(myWebView) myWebView.loadUrl("https://webview.page") } }
Override WebView client -
{custom}/{MyWebViewClient}.kt
:class MyWebViewClient : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean { if (Uri.parse(url).host == "www.webview-site.com") { // This is the loading web site, so do not override; let my WebView load the page return false } // Otherwise, launch another Activity that handles URLs including App scheme URL Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply { view.context.startActivity(this) } return true } }
Deep Link
在 AndroidManifest.xml
另外新增 <intent-filter>
作為 scheme intent 設定,以下提供 URL Scheme 範例:
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter android:label="URL Scheme Setting">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "example://gizmos” -->
<data android:scheme="example" android:host="gizmos" />
</intent-filter>
</activity>