1、獲取手機運行時最大可占用內存
int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
Log.d("TAG", "Max memory is " + maxMemory + "KB");
2、改變dialog 在不同窗口內顯示不同的大小
//在dialog.show()之后調用
public static void setDialogWindowAttr(Dialog dlg,Context ctx){
Window window = dlg.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.gravity = Gravity.CENTER;
lp.width = LayoutParams.MATH_PARENT;//寬高可設置具體大小
lp.height = LayoutParams.MATH_PARENT;
dlg.getWindow().setAttributes(lp);
}
摘抄自:簡書——MrRock
3、監聽Activity是否顯示在用戶面前
@Override
public void onWindowFocusChanged(boolean hasFocus) {
// TODO Auto-generated method stub
super.onWindowFocusChanged(hasFocus);
}
當Activity展示咋用戶面前則 hasFocus 為 true;
4、成員變量與局部變量的區別(簡寫:成、局)
1)、類中位置不同:成:類內 局: 方法內伙子方法上;
2)、內存中位置不同:成:棧內存 局:堆內存;
3)、生命周期不同:成:與對象共存亡 局:與方法共存亡;
4)、初始化值不同:成:有默認值 局:無默認值,必須賦值。
5、Java 獲取可變的 uuid
uuid 類似于時間戳 永遠不可重復。
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
6、Android 獲取 WiFi 的 ssid
1)、在 AndroidManifest.xml 文件內添加權限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
2)、需要獲取的位置添加如下代碼
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
Logger.d("wifiInfo"+wifiInfo.toString());
Logger.d("SSID"+wifiInfo.getSSID());
3)、若不是想獲取當前連接,而是想獲取WIFI設置中的連接
WifiManager.getConfiguredNetworks()
4)、若獲取更多的信息請查看這位兄嘚的博客:Android連續獲取當前所連接WiFi及周圍熱點列表信息的解決方案 .
7、Android 打開 WiFi 設置界面
1)、判斷手機是否連接wifi
if (ConnectionDetector.getConnectionType(this) != ConnectionDetector.WIFI) {
//跳轉wifi配置界面
goToWifSetting();
} else {
//wifi已經連接
}
代碼如下:
Intent intent = new Intent();
if(android.os.Build.VERSION.SDK_INT >= 11){
//Honeycomb
intent .setClassName("com.android.settings", "com.android.settings.Settings$WifiSettingsActivity");
}else{
//other versions
intent .setClassName("com.android.settings", "com.android.settings.wifi.WifiSettings");
}
startActivity(intent);
或者
if (android.os.Build.VERSION.SDK_INT > 10) {
// 3.0以上打開設置界面,也可以直接用ACTION_WIRELESS_SETTINGS打開到wifi界面
startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS));
} else {
startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));
}
8、Android 8.0 獲取 wifi 的 ssid
之前用上面6的方法可以完美的獲取wifif設備的 ssid 但是不能顯示 ssid 即用戶名
ConnectivityManager manager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
assert manager != null;
NetworkInfo info = manager.getActiveNetworkInfo();
if (info != null && info.isConnected()) {
String wifiSsid = info.getExtraInfo().substring(1, info.getExtraInfo().length() - 1).trim();
}
9、判斷字符串是否為純數字串
//判斷字符串是不是純數字
String str = "1234567a";
char[] a = str.toCharArray();
for (char c : a) {
if (Character.isDigit(c)) {
ToastUtils.showToast(mContext, "輸入的內容包含非法字符");
}
}
10、獲取任意區間的隨機數
int nom = (int) (Math.random() * (endNum - startNum + 1) + startNum);
11、以當前日期為基準向前推算到某天
//以當天時間為基準向前推幾日到某天
public static String getPastDate(int past) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past);
Date today = calendar.getTime();
@SuppressLint("SimpleDateFormat") SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
return format.format(today);
}
12、關于 Android 的 Uri、path、file 的轉換
Uri--->file
File file = null;
try {
file = new File(new URI(uri.toString()));
} catch (URISyntaxException e) {
e.printStackTrace();
}
file--->Uri
URI uri = file.toURI();
file--->path
String path = file.getPath()
path--->file
Uri uri = Uri.parse(path);
path--->file
File file = new File(path)
Uri--->path
/**
* 根據Uri獲取圖片的絕對路徑
*
* @param context 上下文對象
* @param uri 圖片的Uri
* @return 如果Uri對應的圖片存在, 那么返回該圖片的絕對路徑, 否則返回null
*/
public static String getRealPathFromUri(Context context, Uri uri) {
int sdkVersion = Build.VERSION.SDK_INT;
if (sdkVersion >= 19) { // api >= 19
return getRealPathFromUriAboveApi19(context, uri);
} else { // api < 19
return getRealPathFromUriBelowAPI19(context, uri);
}
}
/**
* 適配api19以下(不包括api19),根據uri獲取圖片的絕對路徑
*
* @param context 上下文對象
* @param uri 圖片的Uri
* @return 如果Uri對應的圖片存在, 那么返回該圖片的絕對路徑, 否則返回null
*/
private static String getRealPathFromUriBelowAPI19(Context context, Uri uri) {
return getDataColumn(context, uri, null, null);
}
/**
* 適配api19及以上,根據uri獲取圖片的絕對路徑
*
* @param context 上下文對象
* @param uri 圖片的Uri
* @return 如果Uri對應的圖片存在, 那么返回該圖片的絕對路徑, 否則返回null
*/
@SuppressLint("NewApi")
private static String getRealPathFromUriAboveApi19(Context context, Uri uri) {
String filePath = null;
if (DocumentsContract.isDocumentUri(context, uri)) {
// 如果是document類型的 uri, 則通過document id來進行處理
String documentId = DocumentsContract.getDocumentId(uri);
if (isMediaDocument(uri)) { // MediaProvider
// 使用':'分割
String id = documentId.split(":")[1];
String selection = MediaStore.Images.Media._ID + "=?";
String[] selectionArgs = {id};
filePath = getDataColumn(context, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection, selectionArgs);
} else if (isDownloadsDocument(uri)) { // DownloadsProvider
Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(documentId));
filePath = getDataColumn(context, contentUri, null, null);
}
} else if ("content".equalsIgnoreCase(uri.getScheme())) {
// 如果是 content 類型的 Uri
filePath = getDataColumn(context, uri, null, null);
} else if ("file".equals(uri.getScheme())) {
// 如果是 file 類型的 Uri,直接獲取圖片對應的路徑
filePath = uri.getPath();
}
return filePath;
}
/**
* 獲取數據庫表中的 _data 列,即返回Uri對應的文件路徑
*
*/
private static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
String path = null;
String[] projection = new String[]{MediaStore.Images.Media.DATA};
Cursor cursor = null;
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
if (cursor != null && cursor.moveToFirst()) {
int columnIndex = cursor.getColumnIndexOrThrow(projection[0]);
path = cursor.getString(columnIndex);
}
} catch (Exception e) {
if (cursor != null) {
cursor.close();
}
}
return path;
}
/**
* @param uri the Uri to check
* @return Whether the Uri authority is MediaProvider
*/
private static boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
/**
* @param uri the Uri to check
* @return Whether the Uri authority is DownloadsProvider
*/
private static boolean isDownloadsDocument(Uri uri) {
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}
13、判斷 Service 是否存活,是否在運行
/**
* 判斷 Service 是否處于存活狀態
* @param context 上下文
* @param serviceName Service 的名稱,帶有包名的完整名稱 ,例子:“com.hxd.test.service.FunctionService”
* @return true 表示存活,false 表示不再存活
*/
public static boolean isServiceWorked(Context context, String serviceName) {
ActivityManager myManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
ArrayList<ActivityManager.RunningServiceInfo> runningService =
(ArrayList<ActivityManager.RunningServiceInfo>) Objects.requireNonNull(myManager)
.getRunningServices(Integer.MAX_VALUE);
for (int i = 0; i < runningService.size(); i++) {
if (runningService.get(i).service.getClassName().equals(serviceName)) {
return true;
}
}
return false;
}
14、在任何位置打開一個Activity
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);
15 、ANR 定位方法
系統會在/data/anr目錄下創建一個文件traces.txt
歡迎關注.jpg