發表文章

目前顯示的是 2017的文章

正規表示法 Regular Expression 拆解字串

欲將字串 "07:00-22:00" 拆解成 "07", "00", "22", "00"。 可利用 String 所提供的 split( String regex ) 方法。 https://docs.oracle.com/javase/9/docs/api/java/lang/String.html#split-java.lang.String- 其中的 regex 代入的值為 "[:-]"。此字串為正規表示式。 https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true 在拆解前,可先對原字串 "07:00-22:00" 進行分析。希望得到的是  "07", "00", "22", "00"。介於這些字串間的字元則為全型的冒號與半形的減號。所以要用 ':' 或 '-' 對原字串進行拆解。 上面正規表示式的連結中,有一項說明如下。 [abc]     a, b, or c (simple class) 此項的意義為只要是方括弧中的字元皆符合其條件。 所以利用這樣的邏輯,在呼叫 String 的 split 時,代入 "[:-]",即可得到所求。

Over-the-Air Profile Delivery and Configuration 描述檔的無線傳送與配置

圖片
iOS over-the-air enrollment and configuration provides an automated way to configure devices securely within the enterprise. This process provides IT with assurance that only trusted users are accessing corporate services and that their devices are properly configured to comply with established policies. Because configuration profiles can be both encrypted and locked, the settings cannot be removed, altered, or shared with others. iOS 無線註冊和配置提供了一種在企業內安全配置設備的自動化方法。 該流程為 IT 部門提供了保證,即只有受信任的用戶才能訪問企業服務,並確保他們的設備已正確配置以符合既定策略。 由於配置配置文件既可以被加密也可以被鎖定,因此這些設置不能被刪除,更改或與其他人共享。 iOS 無線註冊與配置可在企業內部提供裝置安全自動化配置。此程序讓資訊人員確保只有被信任的使用者能存取公司的服務, ----------------------------------------------------------------------------------------------------------------------- More importantly, for geographically distributed enterprises, an over-the-air profile service allows you to enroll iOS-based devices without physically connecting them to an iPhone Configuration Utility host. 更重要的是,對於分佈在不同地理位置的企業,通過無線

iOS 禁用相機研究

話說 Android 可透過 DevicePolicyManager 禁用相機,而且是從 2011 年 10 月所 Release 的 Ice Cream Sandwich 就開始支援。既然 Google 都能為 Enterprise 著想,Apple 沒道理沒在這樣的需求領域中著墨。但最近得到的消息都是「做不到」。 在一番搜尋後,找到一些蛛絲馬跡。 iOS 部署參考>附錄 >取用限制參考>App 使用限制>允許使用相機 Configuration Profile Reference> Payload-Specific Property Keys> Restrictions Payload> allowCamera

ASUS Zenfone 3 Ultra Handler.sendEmptyMessageAtTime()

sendEmptyMessage workable but sendEmptyMessageAtTime doesn't work. postAtTime 也不會作動。

iOS MDM

Mobile Device Management Protocol Reference https://developer.apple.com/library/content/documentation/Miscellaneous/Reference/MobileDeviceManagementProtocolRef/1-Introduction/Introduction.html 1. iOS 裝置:iOS 4 & ↑。 2. macOS 裝置:macOS v10.7 & ↑。 3. Apple TV 裝置:iOS 7(Apple TV 軟體 6.0)& ↑。 透過 MDM 服務,IT 管理員可檢查、安裝或移除管理設定檔,移除密碼,或在受管制的裝置上執行安全性清除程序。 MDM 協定由以下項目構成 1. HTTP 2. TLS 3. 推播通知。 MDM 使用 蘋果推播通知服務(APNS) 發送「啟用」(wake up)訊號給受管理的裝置。該裝置在收到訊號後會連結至預先設定好的網路服務以取得命令並回傳結果。 MDM 伺服器必須採用 HTTPS。 受管理的裝置使用身份證明透過 TSL (SSL) 向 MDM 伺服器進行自身驗證。該身份證明可以包含在 Certificate 承載項目(payload)中或可經由具有 SCEP 的裝置於註冊時生成。 SCEP https://datatracker.ietf.org/doc/draft-nourse-scep/ MDM 承載項目可置於配置管理設定檔(.mobileconfig),並透過電子郵件或網頁發佈,經由無線註冊服務所傳遞的完整配置管理設定檔的一部份,或自動地使用裝置註冊程序(Device Enrollment Program)。任何時候於裝置上只會有一個 MDM 承載項目被安裝。 透過 MDM 服務所安裝的配置管理設定檔與供應管理設定檔稱為託管管理設定檔。當 MDM 承載項目被移除時,這些管理設定檔會自動地被移除。雖然 MDM 服務有權檢查裝置中的完整配置管理設定檔與供應管理設定檔列表,但僅能移除原本由它本身安裝的應用程式、配置管理設定檔或供應管理設定檔。使用託管管理設定檔所安裝的帳號稱為託管帳號。 除了託管管理設定檔外, 亦可以使用 MD

(續3)Device Administration 裝置管理

Source URL https://developer.android.com/guide/topics/admin/device-admin.html 前一篇文章在此 https://javahand.blogspot.tw/2017/12/device-administration_4.html 在繼續之前,先來看 iOS 對 MDM 的支援。在 Google 中用關鍵字 "iOS MDM" 搜尋,第一個結果即為 Apple 官方的 商務支援 。後來隨便逛,又找到 Mobile Device Management (MDM) Protocol 。只能待我了解 Android 後,再來研究了。 ----------------------------------------------------- 正文開始 ---------------------------------------------------- 昨天的邏輯大約是 如果未設置管理項目   則顯示設定畫面 showSetupProfile() 如果設定完成   如果受管理的 App 已安裝 或 該 App 為隱藏     則顯示其狀態 showStatusProfile()     否則顯示主要內容 showMainFragment() 先來看 showStatusProfile() ------------------------------------------- showStatusProfile() ----------------------------------------- private void showStatusProfile() {  getSupportFragmentManager().beginTransaction().replace(     R.id.container, new StatusFragment ()).commit();    -------------------- StatusFragment.java ----------------------    public class StatusFragment       extends Fragment

Android 裝置管理使用者自行關閉處理方式

圖片
昨天研究了一天,如果按照 DeviceAdminSample 裡的程式碼,在 onReceive 裡攔截 ACTION_DEVICE_ADMIN_DISABLE_REQUESTED,雖然不會繼續呼叫 onDisableRequested,但系統還是繼續進行取消裝置管理的權限。 但如果 onDisableRequested 沒回傳警語,在撒銷裝置管理時,無論怎麼介入,系統都是直接取消,完全不留顏面。 在 Try 了半天後,發現,onDisableRequested 回傳警語,系統會顯示對話框,如下圖,讓使用者確認是否取消。如果確認取消,onDisabled 隨即會被呼叫,後續動作就可實作在 onDisabled 裡。

Android Device Administration Being Turned Off Issue

Android 的裝置管理,使用者有可能自行關閉。 網路上找了一下,找到下面這篇討論。這篇的作法是在使用者 把裝置管理關掉時, 將裝置恢復成出廠預設值。 https://stackoverflow.com/questions/9298364/how-to-wipe-android-device-when-device-admin-is-deactivated 其作法是在 DeviceAdminReceiver 的入口 onReceive 中,攔截 ACTION_DEVICE_ADMIN_DISABLE_REQUESTED,在此與使用者確認是否關閉裝置管理權限。

(續2)Device Administration 裝置管理

Source URL https://developer.android.com/guide/topics/admin/device-admin.html 前一篇文章在此 https://javahand.blogspot.tw/2017/12/device-administration.html public class MainActivity  extends FragmentActivity  implements StatusFragment.StatusUpdatedListener {  protected void onCreate( Bundle savedInstanceState )  {   ...   if ( null == savedInstanceState )   {     DevicePolicyManager devicePolicyManager = (DevicePolicyManager)      getSystemService( Context.DEVICE_POLICY_SERVICE );     PackageManager packageManager = getPackageManager();    if ( ! devicePolicyManager . isProfileOwnerApp (       getApplicationContext (). getPackageName ()))    { // 如果管理項目尚未設置,將顯示設定畫面。      showSetupProfile ();    }    else    {     try     {       ----------------------------------------------       移至下方再進行了解 — 程式碼 A      ----------------------------------------------     }     catch ( PackageManager.NameNotFoundException e )     {      showStatusProfile();     } // end Try-Ca

(續)Device Administration 裝置管理

圖片
Source URL https://developer.android.com/guide/topics/admin/device-admin.html 前一篇文章在此 https://javahand.blogspot.tw/2017/11/device-administration.html 昨天提到與 Device Administration 有關的範例有五個。 首先匯入的是 App Restriction Enforcer。執行後的畫面如下。 此 App 是與 App Restriction Schema 搭配,才會看出其運作的成果。在按下[SET UP PROFILE]後,畫面如下。 在上圖中,按下[繼續],會出現以下對話框。 在此之後的操作就忘了記錄。如果一切順利,受管控的 App 就會出現公事包的圖示,如下。 如果事先安裝有 App Restriction Schema 的話,此時執行 App Restriction Enforcer,就會出現必須重新安裝 Schema 的訊息。再次裝好 Schema 後,重新執行 Enforcer 就可看到 Schema 的相關可調整/設定的項目。 了解了 App 運作方式後,來看看程式碼是怎麼實作而成的。寫過 Android 的應該都知道,要先從主 Activity 的 onCreate 方法進行了解。不需深入了解的部份直接以三個點符號代替。 protected void onCreate( Bundle savedInstanceState ) {  ...  setContentView( R.layout.activity_main_real );   --------------------------------------------------------   >> activity_main_real.xml    <LinearLayout>     <FrameLayout>      <TextView       text=intro_message        ----------------------------------------------      

Device Administration 裝置管理

圖片
Source URL https://developer.android.com/guide/topics/admin/device-admin.html 使用裝置管理 API 的應用類別舉例如下: .電郵客戶端應用 .遠端清除裝置的安全應用 .裝置管理服務與應用 運作方式 .系統管理者撰寫主導遠端/本地裝置安全策略的裝置管理應用程式。策略項目可以寫死在應用程式中,也可以動態的從第三方伺服器上取得。 .所開發的應用程式是安裝在使用者的裝置上的。Android 目前並無自動佈署的方案。系統管理者可參考以下的發佈方式:  。Google Play。  。在其它商店中提供安裝。  。經由其它方式發佈該應用程式,像是電郵或網站。 .系統提示使用者啟用裝置管理應用程式。時機與方式取決於應用程式的實作。 .一旦使用者啟用了裝置管理應用程式,就受其管制。遵守這些策略通常會帶來諸多益處,例如存取敏感的系統和資料。 策略  裝置管理 API 所支援的策略。  .啟用密碼:要求裝置必須輸入 PIN 或密碼。  .最短密碼長度:  .密碼必須為英數字:可使用符號字元。  .密碼複雜度需求:密碼必須至少含有一個字母、一個數字與一個特殊字元。  .密碼最少字母需求:  .密碼最少小寫字母需求:  .密碼最少非字母字元需求:  .密碼最少數字需求:  .密碼最少符號需求:  .密碼最少大寫字母需求:  .密碼過期超時:  .密碼歷史限制:  .密碼失敗嘗試次數:  .無動作鎖定最長時間:  .存儲加密需求:  .禁用相機:  其它特性   為了支援上述的策略,裝置管理 API 讓你可以進行:   .提示使用者設置新密碼。   .立即鎖定裝置。   .清除裝置資料(亦即將裝置回復至出廠預設值)。 範例程式   在此目錄下,但我找不到。   <sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java  網路搜了一下,找到以下這篇。  http://blog.qiji.tech/archives/9154  在圖中看到 "Import Sample...",

打卡 App

圖片
今天被付予一項新任務,要撰寫一支打卡 App。 二個主要功能,一、要能辨別身份與二、確認打卡地點。  簡單分析,二個畫面,一個登入,一個打卡。 登入畫面,帳號與密碼。 打卡畫面,地圖,經緯度與誤差值。再加上所在地址。 14:15 新增 ----- 打卡畫面 14:40 新增 ----- 在打卡頁面加入 MapView,執行後在 Android Monitor 中出現以下錯誤訊息。 09-22 14:35:24.745 11902-11902/? E/AndroidRuntime: FATAL EXCEPTION: main                                                    Process: com.javahand.punching, PID: 11902                                                    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.javahand.punching/com.javahand.punching.PunchingActivity}: android.view.InflateException: Binary XML file line #12: Binary XML file line #12: Error inflating class com.google.android.gms.maps.MapView 解決方法:在 gradle 中加入以下 dependency compile 'com.google.android.gms:play-services-maps:11.0.4'   14:51 新增 ----- 老闆突然出現,提出 FakeGPS 的問題。於是找到以下 StackOverflow https://stackoverflow.com/questions/6880232/disable-check-for-mock-location-prevent-gps-spoofing      16:19 新增 ----- 東加西加

Android CoordinatorLayout & Snackbar

圖片
下面連結為 Android 中 Snackbar 類別的 Java API Doc。 https://developer.android.com/reference/android/support/design/widget/Snackbar.html 其中提到 "They show a brief message at the bottom of the screen on mobile ..."。  而我第一次遇上 Snackbar 是在 Tabbed Activity 的 Swipe 模式中。其中使用的是 CoordinatorLayout。那時我認為 Snackbar 的使用必須搭配 CoordinatorLayout。 但在看到上面的敘述,說 Snackbar 會顯示在螢幕底部,讓我想要一探究竟。到底是會出現在螢幕底部,還是跟著 CoordinatorLayout?? 我在原 CoordinatorLayout 外,加了一層 LinearLayout,而在 CoordinatorLayout 後,隨便加了個 Button。結果就如下圖所示。 從圖中可以看出,Snackbar 出現在 CoordinatorLayout 的底部,而不是螢幕的底部。 寫到這邊,想到,如果沒有 CoordinatorLayout,Snackbar 是否就會出現在螢幕底部!?

Driving comfort 舒適駕駛

圖片
此為個人研讀筆記,如有不妥,請告知。 Active Cruise Control with Stop & Go function, ACC 具有暫停與跟進功能的主動巡航控制系統,簡稱 ACC The concept 概觀 This system can be used to select a desired speed that the vehicle will maintain automatically on clear roads. 此系統能讓車輛在無障礙的道路上自動地保持所選擇的速度。 To the extent possible, the system automatically adjusts the speed to a slower vehicle ahead of you. 在可能的範圍內,系統會自動地調整為前方較慢車輛的速度。 The distance that the vehicle maintains to the vehicle ahead of you can be varied. 與前車所保持的距離是可以調整的。 For safety reasons, it depends on the speed. 安全取決於速度。 To maintain a certain distance, the system automatically reduces the speed, applies the brakes lightly, or accelerates again if the vehicle ahead begins moving faster. 為了保持一定的距離,系統會自動地以輕微的剎車來降低車速,或在前車開始加快速度時再次加速。 If the vehicle ahead of you brakes to a halt, the system is able to detect this within the given system limits. If the vehicle ahead of your drives away again from a halt, your vehicle is able to accelerate if operated accord

Change Location Settings 更改位置設定

參照網址 https://developer.android.com/training/location/change-location-settings.html 此為自我學習筆記,如有不妥,請告知。 如果您的 App 需要請求位置資訊,或是接收位置許可的更新,則該裝置相關的系統設定必需是開啟的;像是 GPS 或 Wi-Fi 搜尋。您的 App 可指定所需的位置精準度/耗電量等級與希望的位置更新頻率,讓裝置自動地更改相關的系統設定;而不是直接開啟服務,像是裝置的 GPS 功能。而這些設定定義在 LocationRequest 數據物件中。 此篇告訴您如何使用 Settings API 來檢查哪些設定是開啟的;以及顯示位置設定(Location Settings)對話框的方法,讓使用者透過單一點觸來更新設定。 連結位置服務 為了使用 Google Play Services 與混合式位置提供者所提供的位置服務,使用 Google API Client 與您的 App 進行連結,然後檢查目前的位置設定;並且在必要時,提示使用者開啟所需的設定。關於使用 Google API 客戶端進行連結的細節,請參閱 取得最新已知位置 。 要使用位置服務的 App 必須取得位置許可。這裡使用粗略位置偵測即可。在您 App 的清單中使用 uses-permission 元素即可請求此許可;如以下範例所顯示: <manifest xmlns:android = "http://schemas.android.com/apk/res/android"   package = "com.google.android.gms.location.sample.locationupdates" >   <uses-permission android:name = "android.permission.ACCESS_COARSE_LOCATION" /> </manifest> 如果為 Android 6.0 或以上的裝置,且您 App 的目標 SDK 版本為 23 或更高,則您的 App 就必須將所需的許可列在清單中,並且在執行時請求該許可。更