目錄
- 前言
- 正文
- 1 Android 8.0後notification通知聲音無法關閉或開啓的問題
- 2 Android 8.0獲取wifi ssid 爲 unknow ssid 的問題
- 3. fatal: Not a valid object name: 'master'.
- 4. /system/bin/sh: grep: can't execute: Permission denied
- 5. java.lang.IllegalArgumentException: Failed to find configured root that contains xxx
- 6. Java error: Comparison method violates its general contract
前言
記錄開發中遇到的 bug,不再讓自己重複地被同樣的 bug 折磨。
正文
1 Android 8.0後notification通知聲音無法關閉或開啓的問題
時間:2019年3月19日11:38:39
解決辦法:參考了 https://blog.csdn.net/fzkf9225/article/details/81119780。需要特別注意的是,要記得更新 channelId,新的設置纔會生效。
2 Android 8.0獲取wifi ssid 爲 unknow ssid 的問題
時間:2019年3月19日14:40:10
解決辦法:
// 在 8.0 以上使用,避免獲取到的名字爲 <unknown ssid>
ConnectivityManager cm = (ConnectivityManager) Utils.getApp().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
String ssid= networkInfo.getExtraInfo();
還有一種辦法,增加定位權限:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
這個還需要動態申請,還需要在 app 裏特別說明,有點麻煩。
3. fatal: Not a valid object name: ‘master’.
時間:2019年3月21日10:53:14
問題描述:在一個名字爲 gitskill 的目錄,使用 git init 初始化這個目錄;然後使用 git branch dev 創建 dev 分支,出現這個錯誤。命令使用如下:
wangzhichao@wangzhichao-PC MINGW64 ~/Desktop/gitskill
$ git init
Initialized empty Git repository in C:/Users/wangzhichao/Desktop/gitskill/.git/
wangzhichao@wangzhichao-PC MINGW64 ~/Desktop/gitskill (master)
$ git branch dev
fatal: Not a valid object name: 'master'.
問題分析:使用 git branch 命令查看一下分支狀況,如下:
wangzhichao@wangzhichao-PC MINGW64 ~/Desktop/gitskill (master)
$ git branch
wangzhichao@wangzhichao-PC MINGW64 ~/Desktop/gitskill (master)
$
是的,沒有看錯,沒有分支存在。連 master 分支都不存在。實際上,git init 並不會創建 master 分支,直到完成了第一次 commit。查看下面的命令:
wangzhichao@wangzhichao-PC MINGW64 ~/Desktop/gitskill (master)
$ git st
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
HelloWorld.java
nothing added to commit but untracked files present (use "git add" to track)
wangzhichao@wangzhichao-PC MINGW64 ~/Desktop/gitskill (master)
$ git add .
wangzhichao@wangzhichao-PC MINGW64 ~/Desktop/gitskill (master)
$ git branch
wangzhichao@wangzhichao-PC MINGW64 ~/Desktop/gitskill (master)
$ git commit -m "commit HelloWorld.java"
[master (root-commit) 7fcf75a] commit HelloWorld.java
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 HelloWorld.java
wangzhichao@wangzhichao-PC MINGW64 ~/Desktop/gitskill (master)
$ git branch
* master
wangzhichao@wangzhichao-PC MINGW64 ~/Desktop/gitskill (master)
$
解釋一下,在 add 了 HelloWorld.java 後,依然沒有 master 分支;只有在 commit 了 HelloWorld.java 後,纔有了 master 分支。
4. /system/bin/sh: grep: can’t execute: Permission denied
時間:2019年3月21日13:06:59
問題描述:
C:\Users\wangzhichao>adb shell "top|grep com.bat.clean"
/system/bin/sh: grep: can't execute: Permission denied
解決辦法:
換取一個 root 的手機測試,沒有問題了。所以,現在認爲是因爲手機沒有 root。
5. java.lang.IllegalArgumentException: Failed to find configured root that contains xxx
時間:2019年3月22日22:11:46
錯誤日誌:
java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/9016-4EF8/Videos/20160129_200650.mp4
at android.support.v4.content.FileProvider$SimplePathStrategy.null a(null)(FileProvider.java:183)
at android.support.v4.content.FileProvider.null a(null)(FileProvider.java:4)
at com.sdk.clean.video.VideoUtils.null a(null)(VideoUtils.java:53)
at com.bat.clean.adapter.VideoResultAdapter$MediaViewHolder.null a(null)(VideoResultAdapter.java:10)
at com.bat.clean.adapter.VideoResultAdapter$MediaViewHolder.null lambda$W8mSMnpQe-6pAYCNycyrYkg_zAw(null)(VideoResultAdapter.java:0)
at com.bat.clean.a.-$$Lambda$k$b$W8mSMnpQe-6pAYCNycyrYkg_zAw.null onClick(null)(-.java:4)
at android.view.View.null performClick(null)(View.java:6993)
at android.view.View$PerformClick.null run(null)(View.java:26512)
at android.os.Handler.null handleCallback(null)(Handler.java:790)
at android.os.Handler.null dispatchMessage(null)(Handler.java:99)
at android.os.Looper.null loop(null)(Looper.java:164)
at android.app.ActivityThread.null main(null)(ActivityThread.java:7000)
at java.lang.reflect.Method.null invoke(null)(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.null run(null)(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.null main(null)(ZygoteInit.java:1408)
機型是8.1.0
問題分析:是在將外置 sd 卡上的視頻資源,發送給視頻播放器打開時,或則是圖片資源,發送給圖片打開器(圖庫)時出現的錯誤。其實內置 sd 卡上,是沒有問題的。代碼中已經通過 FileProvider 的形式來處理了,並且在 xml 文件夾下增加了 file_path.xml,如下:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path path="Android/data/com.bat.clean/" name="files_root" />
<external-path path="." name="external_storage_root" />
</paths>
解決辦法:查詢 https://blog.csdn.net/fengyuzhengfan/article/details/52876586#commentsedit--,在 file_path.xml 中增加一個節點:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path path="Android/data/com.bat.clean/" name="files_root" />
<external-path path="." name="external_storage_root" />
<!--https://blog.csdn.net/fengyuzhengfan/article/details/52876586#commentsedit-->
<root-path path="" name="video_photo_root" />
</paths>
文章作者能深入源碼找出解決辦法,很贊。
6. Java error: Comparison method violates its general contract
時間:2019年3月23日10:59:11
問題描述:
private List<AppBean> mAppInfoList = new ArrayList<>();
public void setPosition(int position, List<AppBean> appInfoList) {
mPosition = position;
mAppInfoList.clear();
mAppInfoList.addAll(appInfoList);
sortList(mAppInfoList, mPosition);
}
private void sortList(List<AppBean> appInfoList, final int position) {
Collections.sort(appInfoList, (p1, p2) -> {
if (position == POSITION_DATE) { // 按日期排序
if (p1.getLastUpdateTime() > p2.getLastUpdateTime()) {
return 1;
}
if (p1.getLastUpdateTime() == p2.getLastUpdateTime()) {
return 0;
}
return -1;
} else if (position == POSITION_SIZE) { // 按大小排序
if (p1.getPkgSize() > p2.getPkgSize()) {
return 1;
}
if (p1.getPkgSize() == p2.getPkgSize()) {
return 0;
}
return -1;
} else if (position == POSITION_NAME) { // 按名字首字母排序
final String lhs = StringUtils.getFirstCharacter(p1.getAppName());
final String rhs = StringUtils.getFirstCharacter(p2.getAppName());
return lhs.compareTo(rhs);
}
return 0;
});
}
使用場景是在一個 Activity 裏,獲取到應用列表,在 Fragment 裏按照日期、大小、名字首字母進行排序。
在排序集合時出現的問題,暫時沒有解決辦法,也沒有復現。查詢了 https://stackoverflow.com/questions/19325256/java-lang-illegalargumentexception-comparison-method-violates-its-general-contr,也沒有復現問題。