發表文章

目前顯示的是 12月, 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        ----------------------------------------------