[Android] Colección de sugerencias de desarrollo de Android

1. Obtenga la memoria máxima que se puede ocupar cuando el teléfono está funcionando

int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
Log.d("TAG", "Max memory is " + maxMemory + "KB");

2. Cambie el cuadro de diálogo para mostrar diferentes tamaños en diferentes ventanas.

//在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);
    }

3. Supervisar si la actividad se muestra frente al usuario

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    
    
    // TODO Auto-generated method stub
    super.onWindowFocusChanged(hasFocus);
}

Cuando Activity se muestra frente al usuario, hasFocus es verdadero;

4. La diferencia entre una variable miembro y una variable local (abreviado: Cheng, bureau)
1), la posición en la clase es diferente: Cheng: dentro de la clase: método dentro del método lad;
2), la posición de la memoria es diferente: Cheng: stack memory bureau: Memoria de pila;
3). Ciclo de vida diferente: Cheng: convive con el objeto y muere: convive con el método;
4). Valor de inicialización diferente: Cheng: con valor por defecto. Bureau: sin valor por defecto y debe ser asignado.

5. Java obtiene la variable uuid
uuid es similar a la marca de tiempo y nunca se repite.

String uuid = UUID.randomUUID().toString().replaceAll("-", "");

6. Android obtiene el ssid de WiFi
1), agregue permisos en el archivo AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>

2) Agregue el siguiente código a la ubicación que necesita obtener

WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();

Logger.d("wifiInfo"+wifiInfo.toString());
Logger.d("SSID"+wifiInfo.getSSID());

3) Si no desea obtener la conexión actual, pero desea obtener la conexión en la configuración de WIFI

WifiManager.getConfiguredNetworks()

4) Si obtiene más información, consulte el blog de este hermano: Android obtiene continuamente el WiFi conectado actual y la información de la lista de puntos de acceso circundante.
7. Android abre la interfaz de configuración de WiFi
1), juzgue si el teléfono está conectado a WiFi

if (ConnectionDetector.getConnectionType(this) != ConnectionDetector.WIFI) {
    
    
 //跳转wifi配置界面
    goToWifSetting();
} else {
    
    
        //wifi已经连接
}

el código se muestra a continuación:

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);

o

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.
Antes de que Android 8.0 obtenga el ssid de wifi, el método anterior se puede utilizar para obtener el ssid del dispositivo wifif perfectamente, pero el ssid, que es el nombre de usuario, no se puede mostrar.

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. Determine si la cadena es una cadena numérica pura.

//判断字符串是不是纯数字
String str = "1234567a";

char[] a = str.toCharArray();
for (char c : a) {
    
    
    if (Character.isDigit(c)) {
    
    
        ToastUtils.showToast(mContext, "输入的内容包含非法字符");
    }
}

10. Obtenga números aleatorios en cualquier intervalo

 int nom = (int) (Math.random() * (endNum - startNum + 1) + startNum);

11. Calcule el avance hasta un día determinado en función de la fecha actual.

//以当天时间为基准向前推几日到某天
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. Acerca de la conversión de Android Uri, ruta, archivo
Uri—> archivo

File file = null;
try {
    
    
    file = new File(new URI(uri.toString()));
} catch (URISyntaxException e) {
    
    
    e.printStackTrace();
}

archivo—> Uri

URI uri = file.toURI();

archivo—> ruta

String path = file.getPath()

ruta—> archivo

Uri uri = Uri.parse(path);

ruta—> archivo

File file = new File(path)

Uri—> camino

  /**
     * 根据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. Determine si el Servicio está activo y funcionando.

/**
     * 判断 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. Abra una actividad en cualquier posición

Intent intent = new Intent(Intent.ACTION_MAIN);  
intent.addCategory(Intent.CATEGORY_LAUNCHER);              
ComponentName cn = new ComponentName(packageName, className);              
intent.setComponent(cn);  
startActivity(intent);

15. Método de posicionamiento ANR El
sistema creará un archivo traces.txt en el directorio / data / anr

Autor: Wu Nai Han Xiao Dai
Enlace: https: //www.jianshu.com/p/3f4a38eca3e3
Fuente: Los libros de Jane
tienen derechos de autor del autor. Para reimpresiones comerciales, comuníquese con el autor para obtener autorización. Para reimpresiones no comerciales, indique la fuente.

Supongo que te gusta

Origin blog.csdn.net/qq_30885821/article/details/109097174
Recomendado
Clasificación