Some Android functions

1. 隐藏软键盘

    private void hideKeyboard() {
        final Activity activity = getActivity();
        if (activity != null) {
            View view = activity.getCurrentFocus();
            InputMethodManager imm = (InputMethodManager)
                    activity.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }

 2. 判断有没有实体导航键,HOME BACK RECENT

一般是去看property qemu.hw.mainkeys

可以用adb shell getprop或者在BSP里使用SystemProperties去查看

3. 获取Internal和外部SD卡容量大小:

StorageManager mStorageManager;
mStorageManager = context.getSystemService(StorageManager.class);

final List<VolumeInfo> volumes = mStorageManager.getVolumes();
        Collections.sort(volumes, VolumeInfo.getDescriptionComparator());

        for (VolumeInfo vol : volumes) {
            if (vol.getType() == VolumeInfo.TYPE_PRIVATE) {
                //Internal storage
                final long volumeTotalBytes = PrivateStorageInfo.getTotalSize(vol,
                        sTotalInternalStorage);
            } else if (vol.getType() == VolumeInfo.TYPE_PUBLIC) {
                // SD card
            }
        }

public static long getTotalSize(VolumeInfo info, long totalInternalStorage) {
        final Context context = AppGlobals.getInitialApplication();
        final StorageStatsManager stats = context.getSystemService(StorageStatsManager.class);
        try {
            return stats.getTotalBytes(info.getFsUuid());
        } catch (IOException e) {
            Log.w(TAG, e);
            return 0;
        }
    }

 4. frameworks修改 支持屏幕旋转180度

frameworks/base/core/res/res/values/config.xml

<!-- If true, the screen can be rotated via the accelerometer in all 4
         rotations as the default behavior. -->
    <bool name="config_allowAllRotations">true</bool>

参考 https://blog.csdn.net/Aaron121314/article/details/78235938

5. 启用/禁用锁屏旋转

修改 frameworks/base/core/res/res/values/config.xml

    <!-- Disable lockscreen rotation by default -->
    <bool name="config_enableLockScreenRotation">false</bool>

去使用这个config的位置在 frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java

    private boolean shouldEnableKeyguardScreenRotation() {
        Resources res = mContext.getResources();
        return SystemProperties.getBoolean("lockscreen.rot_override", false)
                || res.getBoolean(R.bool.config_enableLockScreenRotation);
    }

 6. AlertDialog 点击确定/取消,dialog不消失

不管在点击事件中有没有dismiss(), cancel(),默认的AlertDialog,点击确定或取消后dialog都会消失。

需要把默认的点击事件设置为null,然后在show()之后,重新获取button来添加监听事件,此时不显示呼叫dismiss或者cancel,dialog不会消失。

AlertDialog alertDialog = new AlertDialog.Builder(this)
                 .setTitle("test")
                  .setMessage("message")
                  .setPositiveButton("确定", null)
                  .setNegativeButton("取消", null)
                  .show();

          alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  if (dontClose) {
                      Toast.makeText(getApplicationContext(), "此时dialog不关闭", Toast.LENGTH_LONG).show();
                      return;
                  } else {
                      alertDialog.cancel();
                  }
              }
          });

 7. 判断app是不是运行在前台(参照Settings中的方法)

private boolean isSettingsRunOnTop() {
        final ActivityManager activityManager =
            getApplicationContext().getSystemService(ActivityManager.class);
        final String taskPkgName = activityManager.getRunningTasks(1 /* maxNum */)
            .get(0 /* index */).baseActivity.getPackageName();
        return TextUtils.equals(getPackageName(), taskPkgName);
    }
原文地址:https://www.cnblogs.com/kunkka/p/10275571.html