跳到主要內容

發表文章

AndroidManifest的小技巧

當在設定推播時,在  AndroidManifest.xml  上需要指定不同application id時該怎麼辦呢?(可能會有xxx.yyy.com.debug與xxx.yyy.com兩個版本) 有個簡單的小技巧可以實現這件事情。 <permission android:name= "${applicationId}.permission.C2D_MESSAGE" android:protectionLevel= "signature" /> <uses-permission android:name= "${applicationId}.permission.C2D_MESSAGE" /> 參考資料: Using build types in Gradle to run same app that uses ContentProvider on one device

Android 6.0 權限問題

因為總總原因,直到現在才重視這個問題 首先根據 官方文件所述 : 在Android 6.0 (API level 23) 之後分成兩種權限 一般權限(Normal permissions) 危險權限(Dangerous permissions) 列出危險權限的列表 Permission Group Permissions CALENDAR READ_CALENDAR WRITE_CALENDAR CAMERA CAMERA CONTACTS READ_CONTACTS WRITE_CONTACTS GET_ACCOUNTS LOCATION ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION MICROPHONE RECORD_AUDIO PHONE READ_PHONE_STATE CALL_PHONE READ_CALL_LOG WRITE_CALL_LOG ADD_VOICEMAIL USE_SIP PROCESS_OUTGOING_CALLS SENSORS BODY_SENSORS SMS SEND_SMS RECEIVE_SMS READ_SMS RECEIVE_WAP_PUSH RECEIVE_MMS STORAGE READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE 不論一般權限與危險權限,都一樣必須在 AndroidManifest.xml 中使用 <uses-permission> 宣告 而最大的差異在於 危險權限必須另外執行請求權限的訊息框 。 附上在 Activity 實做的儲存權限範例: ... public final static int PERMISSION_CODE = 1 ; protected boolean isStoragePermissionGranted () { if (Build. VERSION . SDK_INT >= 23 ) { String permission = android. Man...

Android 檢查GPS

首先要記得有取得GPS的權限 <uses-permission android:name= "android.permission.ACCESS_FINE_LOCATION" /> 才能檢查GPS有無開啟的狀態 public boolean isGPSEnables () { LocationManager locationManager = (LocationManager) getSystemService(Context. LOCATION_SERVICE ); return locationManager. isProviderEnabled (LocationManager. GPS_PROVIDER ); } 純粹紀錄一下檢查GPS有無開啟的程式碼~

Java Semaphore 用途

老實說,這是第一次接觸到 Semaphore 之前也從來沒使用過,但當使用到他的時候才發現 在多執行緒時的控制,如果想要在某個情況下一次只執行一個執行緒(其實就是想做Lock動作) Semaphore 可以省下許多事情啊!以下列出簡單的範例code protected Semaphore isLock = new Semaphore( 1 ); // 限制同時只有1個在執行 ... new Thread ( new Runnable() { @Override public void run () { try { for ( int i = 0 ; i < 5 ; i++) { isLock. acquire (); // 會先印出open run1接著要等isLock.release(),才會再繼續印出 open run2 Log. e ( "Test" , "open run" + i); } } catch (Exception ex) { isLock. release (); } } }). start (); ... Button release = (Button)findViewById(R. id . release ); release. setOnClickListener ( new View. OnClickListener () { @Override public void onClick (View v) { isLock. release (); // 按下按鈕後才會繼續執行 } }); 參考資料: Semaphore

Android 呼叫 zxing QR code scanner

今天弄個簡單的範例是關於執行QR code掃描的部分 這個方法是直接呼叫 Barcode scanner 的方法 首先在 build.gradle 的 dependencies 加上 compile 'com.google.zxing:android-integration:3.2.1' dependencies { ... compile 'com.google.zxing:android-integration:3.2.1' } 呼叫的方式則是在 Activity or Fragment 中加入執行的程式 IntentIntegrator scanner = new IntentIntegrator(mActivity); scanner. initiateScan (); 要如何得到掃描的值呢?只要 override onActivityResult 就可以囉! @Override protected void onActivityResult ( int requestCode, int resultCode, Intent data) { super . onActivityResult (requestCode, resultCode, data); IntentResult scanner = IntentIntegrator. parseActivityResult (requestCode, resultCode, data); if (scanner != null ) { String code = scanner. getContents (); // 掃描得到的字串 String format = scanner. getFormatName (); // 掃描的格式, 如 QR_CODE } } 附上參考的 java doc Class IntentIntegrator Class IntentResult

Android開啟Facebook App

如果手機裡已經安裝了Facebook,為什麼還要開啟瀏覽器重新輸入帳密呢? 直接用Facebook操作不是比較方便呢? --以上是前言--XD 所以為了方便已經安裝Facebook使用者,所以App裡開啟粉絲專頁時,應該會有兩種方式 範例如下: ... public static void openFacebookPage (Context context, String id) { Intent intent = null ; try { context. getPackageManager (). getPackageInfo ( "com.facebook.katana" , 0 ); String uri = "fb://page/" + id; intent = new Intent(Intent. ACTION_VIEW , Uri. parse (uri)); } catch (Exception e) { String uri = "https://www.facebook.com/pages/1/" + id; intent = new Intent(Intent. ACTION_VIEW , Uri. parse (uri)); } context. startActivity (intent); } ... 參考資料: android - launch facebook app from other app - Stack Overflow php - Facebook API - How do I get a Facebook user's profile image through the Facebook API (without requiring the user to "Allow" the applicati...

Android webview 平板瀏覽手機頁面

在使用平板瀏覽網頁時,卻發現顯示一般的網頁資訊,偏偏想要的結果是瀏覽手機版網頁。 所以這時候就得設定 User Agent(這個前提是網頁切換方式是判斷User Agent) 參考設定的內容如下 ... WebView webView = (WebView) findViewById(R. id . web ); ... webView. getSettings (). setUserAgentString ( "Mozilla/5.0 (Linux; Android 4.4.4; en-us; Nexus 4 Build/JOP40D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2307.2 Mobile Safari/537.36" ); ... 目前用平板瀏覽,確實是手機版網頁,不過這前提是網頁偵測方式是用User Agent判斷 如果是採用螢幕寬度來判斷的話 ... 目前沒想法了(攤)