Posts Tagged With: Android

[Android] WebView 啟動時自動調整大小 – Xamarin for VS2017

我的目標網頁有設定在 html5 的 head 有設定下行:

<meta id="metaViewPort" name="viewport" content="width=480px" />

WebView 預設開啟時,並無法正確的映射到這個尺寸,雖然可以在螢幕上點兩下自動縮放到設定大小,但總是要多一手。

因此透過程式碼設定初始化大小,主要就是這句:

MobileBrowser.SetInitialScale(GetDeviceInitScale());

程式碼片段寫在 MainActivity.cs


private int GetDeviceInitScale()
{

// 預設寬度 480d, 100%: 100d
double val = (double) Resources.DisplayMetrics.WidthPixels / 480d * 100d;
return (int)val;

}

protected override void OnCreate (Bundle bundle)
{

base.OnCreate (bundle);

SetContentView(Resource.Layout.Main);

MobileBrowser = FindViewById<WebView>(Resource.Id.MobileBrowser);

//啟用Javascript Enable
MobileBrowser.Settings.JavaScriptEnabled = true;

//支援縮放 ViewPort
MobileBrowser.Settings.LoadWithOverviewMode = true;
MobileBrowser.Settings.UseWideViewPort = true;

// 計算螢幕比例
MobileBrowser.SetInitialScale(GetDeviceInitScale());

MobileBrowser.SetWebViewClient(new CustomWebViewClient());

//載入網址
MobileBrowser.LoadUrl(“http://www.company.com/");

}


這樣開啟 WebView 就會自動縮放到網頁大小了。

廣告
Categories: 工作點滴, 技術分享 | 標籤: | 發表留言

[Hyper-V] 在 Visual Studio Emulator For Android 我的虛擬網路設定

我在 Win81 時的 Hyper-V 中,透過 Loopback 網卡來分享 WiFi 給虛擬機用:

[Hyper-V] 我 NB 用的虛擬網卡
https://tlcheng.wordpress.com/2016/02/22/hyper-v-%e6%88%91-nb-%e7%94%a8%e7%9a%84%e8%99%9b%e6%93%ac%e7%b6%b2%e5%8d%a1/

當時的 NB 是效能不是很好,所以一直沒考慮使用 Hyper-V 跑 Android 模擬機,一直用 VirtualBox 來跑 Android 模擬機。

Visual Studio 2015 (VS) 以後,微軟推出了整合 VS IDE 開發環境與模擬機的架構,提高 Android 行動軟體開發速度,沒有安裝 VS 的電腦也可以安裝來跑 Android 模擬機:

Visual Studio Emulator For Android (以下簡稱模擬器)
https://www.visualstudio.com/zh-hant/vs/msft-android-emulator/

當然有安裝 VS 2017 的有內建,VS 2017 內建的版本比上述網站下載的還新。

我開始在 Hyper-V 測試模擬器,一開始就卡在開機中的畫面,不知道啥原因:

卡在開機中的畫面

卡在開機中的畫面

 

Terry Lin 建議我依照下面這篇除錯:

Visual Studio Emulator for Android 疑難排解
https://msdn.microsoft.com/zh-tw/library/mt228282.aspx#NoStart

無法解決問題,之後 Ian Chen 建議我把所有 Virtual Switch 全部砍掉一預設值重建,砍掉前我有看了一下設定後,砍掉重建,重建後我的模擬機就能完成開機,但卻出現不能上網。

Windows Phone Emulator Internal Switch

Windows Phone Emulator Internal Switch

註:後來是因為我的 Windows Phone Emulator Internal Switch 內不知道為啥預設是 169.* 開頭的 IP ,這裡必須是動態取得 IP

一開始無法上網,我依據先前跑 Windows VM 的慣例,把 Microsoft Loopback 網卡設定給 Android 模擬器,但是還是無法上網,Aska Su 建議我用 Hyper-V 建一個 Hyper-V Loopback 內部虛擬網路:

Hyper-V Loopback

Hyper-V Loopback

再把 WiFi 分享給 Hyper-V Loopback 虛擬網卡:

共用 WiFi 給 Hyper-V Loopback

共用 WiFi 給 Hyper-V Loopback

 

我用 Windows VM 測試,也可正常成功。

Hyper-V Loopback 速率 10 Gbps

Hyper-V Loopback 速度

Hyper-V Loopback 速度

比 Microsoft Loopback 網卡 1.2 Gbps 快。

Microsoft Loopback 速度

Microsoft Loopback 速度

 

但是 Android 模擬器仍無法上網。測試各種方案,Android 模擬機都會自動把 Windows Phone Emulator Internal Switch 虛擬網卡自動加入,若是參數不正確,還會自動把前次設定錯誤的網卡刪除。

苦無對策,拜了 google 大神,一般解決方案都是將無線網卡加入第二張 Android 模擬機網卡,這表示我得放棄不將 WiFi 加入虛擬交換器,必須將 WiFi 加入到 Hyper-V 內。

虛擬交換器管理員

虛擬交換器管理員

WiFi 一加入虛擬交換器就會組成網路橋接器,這讓網路管理複雜很多:

網路橋接器

網路橋接器

加入到 Android 模擬機第二張網卡:

WiFi 加到第二張網卡

WiFi 加到第二張網卡

就可正常上網了:

從無線基地台取得實體 IP

從無線基地台取得實體 IP

註:若網路設定錯誤,Android 模擬機仍會自動將無線網卡刪除

成功上網後,摸清楚特性,就測試改用 Hyper-V Loopback 網卡,由於 Hyper-V Loopback 網卡為內部網卡,只要一設定 IP ,例如共用網路變成 192.168.137.1 ,就會造成模擬機無法開機,只有外部網卡能設 IP。因此又回頭使用 Microsoft Loopback 網卡加入虛擬交換器:

Microsoft Loopback 加入第二張網卡

Microsoft Loopback 加入第二張網卡

再將 WiFi 分享給 Microsoft Loopback 虛擬網卡

WiFi 分享給 Microsoft Loopback

WiFi 分享給 Microsoft Loopback

一樣自動被設定為 192.168.137.1

虛擬網段 IP

虛擬網段 IP

讓網路設定變得比較乾淨:

實體網卡好管理

實體網卡好管理

終於,可以把先前的 Microsoft Loopback 網卡分享給 Android 模擬機。

透過 Microsoft Loopback 取得虛擬 IP

透過 Microsoft Loopback 取得虛擬 IP

平常沒有使用 Hyper-V 的時候,我就會停用不相關的網卡,另外重新把 Windows VM 網卡設給 Microsoft Loopback ,反正 1.2 Gbps 也夠我用了,平常就懶得動,直接用同一張須擬網卡就可以,這樣在外沒有無線基地台的情況下,模擬器也可以透過 192.168.137.* 網段與 NB 溝通,恢復到我的習慣工作環境了。

Categories: 工作點滴, 技術分享 | 標籤: | 2 則迴響

[Android] AirDroid 在 Android 6.0 看不到 外部SD卡 – Zenfone 3 ZE520KL

AirDroid 是一套 Android 上很有名的軟體,主要功能是把手機當成一個 Web ,透過 IE11/Chrome 連入後,上下傳檔案或是操作手機,我常常拿來編輯聯絡人、發簡訊 (我喜歡用鍵盤打)、抓照片及錄影。

在 Android 4.4 以後,開始對 Apps 限縮存取 外部 MicroSD 卡的權限,當然山不轉路轉,軟體自有解套,所以 Zenfone 3 一到手我仍然裝上這隻程式,並正確的存取外部SD卡。

Zenfone 3 剛到手的時候,手邊沒有準備 MicroSD 卡,把三年前買給電視盒的 32 GB Class 6 卡先插進去,後來看到一些文章提到,ZenFone 3 支援 4K 錄影,但需要高速卡,就另外買了一張讀取速度到 85 MB UHS-I 64 GB 記憶卡。

本來 32 GB 記憶卡用 AirDroid 滿正常的,但 64 GB 記憶卡在網頁上看到的 外部SD卡 是空白的,沒目錄、檔案,想說原先好像有設定到 MicroSD 卡的磁碟代碼,所以應該是 AirDroid 的設定問題,測了半天,終於搞定。請依以下步驟:

1. 從手機的設定叫出應用程式來。

選取 [應用程式]

選取 [應用程式]

選取 [AirDroid]

選取 [AirDroid]

2. 刪除 AirDroid 所有使用的記憶體,這會把 AirDroid 設定都刪除,沒錯,就是要刪除重設。

選取 [儲存空間]

選取 [儲存空間]

選取 [清除資料]

選取 [清除資料]

3. 開啟 AirDroid 就如同第一次使用,開到可以讓網頁連入。

第一次啟動 AirDroid

第一次啟動 AirDroid

4. 用網頁連入,這邊使用 Chrome ,點選到 外部SD卡 ,這時候會跳出一個對話框,提醒你要設定。

外部 SD 卡需要授權

外部 SD 卡需要授權

5. 點選 [檔案] [外部SD卡] [完成],注意上方選擇的是 MicroSD ,點選右下角的 [選取] 。

選取 [檔案]

選取 [檔案]

選取 [外部SD卡]

選取 [外部SD卡]

 

選取 [完成]

選取 [完成]

選取 [Micro SD]

選取 [Micro SD]

選取 [選取] 後的畫面

選取 [選取] 後的畫面

6. 可以發現 Chrome 可以正常存取 外部SD卡了。

正常存取 [外部SD卡]

正常存取 [外部SD卡]

其他:
若不想看到網頁跳出提醒畫面,可直接步驟 3 完作步驟 5 ,再用網頁瀏覽器連接,就可以直接到步驟 6 。
若步驟 6 看到的是空白沒任何檔案,請確定步驟 5 最後選取前是否沒任何檔案,若兩邊一致就沒問題,若有問題的話,回到步驟 1 重作。
另外如果只是隱藏的檔案或是 . 開頭的檔案或目錄名出不來,我還找不到解決方法,好像就是出不來。

Categories: 行動裝置, 技術分享 | 標籤: | 2 則迴響

在WordPress.com寫網誌.

%d 位部落客按了讚: