1、點亮屏幕+跳過滑動鎖屏;
要實現軟電話的來電界面,響鈴亮屏之類的需求,看到微信語音通話能實現android端的跳過滑動鎖屏(密碼、手勢密碼類的沒法子了)
從一個 偽裝來電的應用里“學”了一部分代碼片段,大致實現了這個需求;
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
wlock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK
|PowerManager.ACQUIRE_CAUSES_WAKEUP, "incomingcall");
wlock.acquire();
klock = ((KeyguardManager)
getSystemService(KEYGUARD_SERVICE)).newKeyguardLock("Incomingcall");
klock.disableKeyguard();
別忘了 離開時釋放這兩個 lock.
還有相關權限
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
上面的方案存在問題,設置了密碼/圖案/指紋 后無法彈出
方案二,在來電Activity的 setContentView 前 加入
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON|
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
方案二 在小米和魅族上搞不起來,因為這倆貨增加了鎖屏顯示權限,默認關(魅族默認詢問)
oncreate(....
// 用方法一 亮屏,播放來電鈴聲,
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
|WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
這樣可以解決小米上的情況,但是魅族搞不起來,addFlags后魅族根本這個Activity就不彈出了。。。。。
放棄,或者放棄魅族(為魅族使用方案一)
2、Library Module 引入 aar包的問題;
如果直接在 Library Module 增加
repositories { flatDir { dirs 'aars' } }
dependencies {
compile 'com.android.support:support-v4:23.4.0'
compile(name: 'xxx', ext: 'aar')
}
就會出現下面層級的 Library Module 都會出現引用問題
解決方案是
New Module , 把 aar 導入為 aar module, 在需要的工程應用該module
3、判斷miui (獲取miui版本)
// 不是 miui 則返回 空字符,miui則返回對應的版本
public static String getMiuiVersion() {
String line;
BufferedReader input = null;
try {
// 華為 emui 命令 “getprop ro.build.version.emui”
Process p = Runtime.getRuntime().exec("getprop ro.miui.ui.version.name");
input = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024);
line = input.readLine();
input.close();
} catch (IOException ex) {
return null;
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
}
}
}
return line;
}
4、跳轉當前應用的設置界面
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", this.getPackageName(), null);
intent.setData(uri);
startActivity(intent);
5、gradle 打包 bat [ANSI編碼]
echo ######## start ########
call gradlew.bat clean
echo ################ 別急,才剛剛開始 ##################
set curr_dir=%cd%
TortoiseProc /command:update /path:"%curr_dir%" /closeonend:1
call gradlew.bat assembleRelease
set
echo %curr_dir%
set apk_dir=%curr_dir%\WindWCMS\wcmsMain\build\outputs\apk
echo
echo ############################################
echo ################ Build OK ##################
echo ############################################
echo ##### 到這里去找你的apk文件吧 - %apk_dir%
echo ############################################
echo
pause
6、Android 事件分發
Android 事件分發