編輯:關於Android編程
最近工作中遇到一個特殊的需求,要求代碼能夠從後台開機android手機藍牙的可見性。而framework提供了一種打開可見性的操作,就是通過向用戶彈出一個提示框,來詢問是否允許開啟可見性。而且限制了最長時間為300秒,代碼如下:
//啟動修改藍牙可見性的Intent Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); //設置藍牙可見性的時間,方法本身規定最多可見300秒 intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); startActivity(intent);
但通過android的自帶的settings程序,我們可以直接開機藍牙可見性。所以下載settings的源碼,進行分析。找到了開啟藍牙可見性的代碼,如下:
private void setEnabled(boolean enable) { if (enable) { int timeout = getDiscoverableTimeout(); mLocalAdapter.setDiscoverableTimeout(timeout); long endTimestamp = System.currentTimeMillis() + timeout * 1000L; LocalBluetoothPreferences.persistDiscoverableEndTimestamp(mContext, endTimestamp); mLocalAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE, timeout); updateCountdownSummary(); } else { mLocalAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE); } }
public void setDiscoverableTimeout(int timeout) { BluetoothAdapter adapter=BluetoothAdapter.getDefaultAdapter(); try { Method setDiscoverableTimeout = BluetoothAdapter.class.getMethod("setDiscoverableTimeout", int.class); setDiscoverableTimeout.setAccessible(true); Method setScanMode =BluetoothAdapter.class.getMethod("setScanMode", int.class,int.class); setScanMode.setAccessible(true); setDiscoverableTimeout.invoke(adapter, timeout); setScanMode.invoke(adapter, BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE,timeout); } catch (Exception e) { e.printStackTrace(); } }
public void closeDiscoverableTimeout() { BluetoothAdapter adapter=BluetoothAdapter.getDefaultAdapter(); try { Method setDiscoverableTimeout = BluetoothAdapter.class.getMethod("setDiscoverableTimeout", int.class); setDiscoverableTimeout.setAccessible(true); Method setScanMode =BluetoothAdapter.class.getMethod("setScanMode", int.class,int.class); setScanMode.setAccessible(true); setDiscoverableTimeout.invoke(adapter, 1); setScanMode.invoke(adapter, BluetoothAdapter.SCAN_MODE_CONNECTABLE,1); } catch (Exception e) { e.printStackTrace(); } }
如果想實現超時後自動關閉可見性的效果,使用Handler
以上代碼在android4.2以上可以允許,4.2以下會因為缺少系統權限而運行失敗。
一. 百度地圖城市定位和POI搜索知識 上一篇文章百度地圖開發(一)中講述了如何申請百度APIKey及解決顯示空白網格的問題.該篇文章主要講述如何定位城市位置、定位自己的
看下效果圖主要看下自定義view 代碼public class ProcessImageView extends ImageView{ private Context
問題:橫豎屏切換時Activity的生命周期?測試環境:華為mate7 package com.virglass.beyond.activity;import
在學習獲取相冊中圖片進行裁剪的時候遇到了比較大的問題,在糾結了近半天才真的解決,下面分享一下學習經驗。問題:選擇了相冊中的圖片之後要進入圖片裁剪的時候出錯,(華為)手機提