Android Dev 工具类链式调用 Helper 类

Android MediaPlayer Playback---多媒体开发应用程序接口 立即下载

DevUtils Github

方法注释
get获取单例 DevHelper
viewHelper获取 ViewHelper
devHelper获取 DevHelper
postRunnable在主线程 Handler 中执行任务
removeRunnable在主线程 Handler 中清除任务
startTimer运行定时器
closeTimer关闭定时器
recycleBitmap 通知回收
saveBitmapToSDCardJPEG保存图片到 SDCard - JPEG
saveBitmapToSDCardPNG保存图片到 SDCard - PNG
saveBitmapToSDCardWEBP保存图片到 SDCard - WEBP
saveBitmapToSDCard保存图片到 SDCard
addTextChangedListener添加输入监听事件
removeTextChangedListener移除输入监听事件
setKeyListener设置 KeyListener
record日志记录
cleanInternalCache清除内部缓存 - path /data/data/package/cache
cleanInternalFiles清除内部文件 - path /data/data/package/files
cleanInternalDbs清除内部数据库 - path /data/data/package/databases
cleanInternalDbByName根据名称清除数据库 - path /data/data/package/databases/dbName
cleanInternalSp清除内部 SP - path /data/data/package/shared_prefs
cleanExternalCache清除外部缓存 - path /storage/emulated/0/android/data/package/cache
cleanCustomDir清除自定义路径下的文件, 使用需小心请不要误删, 而且只支持目录下的文件删除
cleanApplicationData清除本应用所有的数据
copyText复制文本到剪贴板
copyUri复制 URI 到剪贴板
copyIntent复制意图到剪贴板
notifyMediaStore通知刷新本地资源
insertImageIntoMediaStore添加图片到系统相册 ( 包含原图、相册图, 会存在两张 ) - 想要一张, 直接调用 notifyMediaStore()
insertVideoIntoMediaStore添加视频到系统相册
insertIntoMediaStore保存到系统相册
showDialog显示 Dialog
closeDialog关闭 Dialog
closeDialogs关闭多个 Dialog
closePopupWindow关闭 PopupWindow
closePopupWindows关闭多个 PopupWindow
autoCloseDialog自动关闭 dialog
autoClosePopupWindow自动关闭 PopupWindow
openKeyboard打开软键盘
closeKeyboard关闭软键盘
closeKeyBoardSpecial关闭软键盘 - 特殊处理
judgeView设置某个 View 内所有非 EditText 的子 View OnTouchListener 事件
registerSoftInputChangedListener注册软键盘改变监听
registerSoftInputChangedListener2注册软键盘改变监听
applyLanguage修改系统语言 (APP 多语言, 单独改变 APP 语言 )
setOnClicks设置点击事件
setOnLongClicks设置长按事件
addTouchArea增加控件的触摸范围, 最大范围只能是父布局所包含的的区域
cancelAllNotification移除通知 - 移除所有通知 ( 只是针对当前 Context 下的 Notification)
cancelNotification移除通知 - 移除标记为 id 的通知 ( 只是针对当前 Context 下的所有 Notification)
notifyNotification进行通知
saveAssetsFormFile获取 Assets 资源文件数据并保存到本地
saveRawFormFile获取 Raw 资源文件数据并保存到本地
setWindowSecure设置禁止截屏
setFullScreen设置屏幕为全屏
setLandscape设置屏幕为横屏
setPortrait设置屏幕为竖屏
toggleScreenOrientation切换屏幕方向
forceGetViewSize在 onCreate 中获取视图的尺寸 - 需回调 onGetSizeListener 接口, 在 onGetSize 中获取 View 宽高
vibrate震动
cancel取消震动
closeIO关闭 IO
closeIOQuietly安静关闭 IO
getNetTime获取网络时间 - 默认使用百度链接
waitForEndAsyn设置等待一段时间后, 通知方法 ( 异步 )
waitForEnd设置等待一段时间后, 通知方法 ( 同步 )
setAnimationListener设置动画事件
package dev.utils.app.helper;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.app.Notification;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Handler;
import android.support.annotation.IntRange;
import android.support.annotation.RawRes;
import android.support.v4.app.DialogFragment;
import android.text.TextWatcher;
import android.text.method.KeyListener;
import android.view.View;
import android.view.animation.Animation;
import android.widget.EditText;
import android.widget.PopupWindow;

import java.io.Closeable;
import java.io.File;
import java.util.Locale;

import dev.utils.app.AnalysisRecordUtils;
import dev.utils.app.CleanUtils;
import dev.utils.app.ClickUtils;
import dev.utils.app.ClipboardUtils;
import dev.utils.app.ContentResolverUtils;
import dev.utils.app.DialogUtils;
import dev.utils.app.EditTextUtils;
import dev.utils.app.HandlerUtils;
import dev.utils.app.KeyBoardUtils;
import dev.utils.app.LanguageUtils;
import dev.utils.app.ListenerUtils;
import dev.utils.app.NotificationUtils;
import dev.utils.app.ResourceUtils;
import dev.utils.app.ScreenUtils;
import dev.utils.app.SizeUtils;
import dev.utils.app.VibrationUtils;
import dev.utils.app.anim.AnimationUtils;
import dev.utils.app.assist.manager.TimerManager;
import dev.utils.app.image.BitmapUtils;
import dev.utils.app.image.ImageUtils;
import dev.utils.common.CloseUtils;
import dev.utils.common.HttpURLConnectionUtils;
import dev.utils.common.assist.TimeKeeper;

/**
 * detail: Dev 工具类链式调用 Helper 类
 * @author Ttt
 * <pre>
 *     通过 DevApp 工具类快捷实现
 *     <p></p>
 *     DevApp Api
 *     @see <a href="https://github.com/afkT/DevUtils/blob/master/lib/DevApp/README.md"/>
 * </pre>
 */
public final class DevHelper {

    // TimeKeeper
    private TimeKeeper mTimeKeeper = new TimeKeeper();
    // DevHelper
    private static final DevHelper HELPER = new DevHelper();

    /**
     * 获取单例 DevHelper
     * @return {@link DevHelper}
     */
    public static DevHelper get() {
        return HELPER;
    }

    // ==========
    // = Helper =
    // ==========

    /**
     * 获取 ViewHelper
     * @return {@link ViewHelper}
     */
    public ViewHelper viewHelper() {
        return ViewHelper.get();
    }

    /**
     * 获取 DevHelper
     * @return {@link DevHelper}
     */
    public DevHelper devHelper() {
        return this;
    }

    // ===========
    // = Handler =
    // ===========

    /**
     * 在主线程 Handler 中执行任务
     * @param runnable 可执行的任务
     * @return {@link DevHelper}
     */
    public DevHelper postRunnable(final Runnable runnable) {
        HandlerUtils.postRunnable(runnable);
        return this;
    }

    /**
     * 在主线程 Handler 中执行延迟任务
     * @param runnable    可执行的任务
     * @param delayMillis 延迟时间
     * @return {@link DevHelper}
     */
    public DevHelper postRunnable(final Runnable runnable, final long delayMillis) {
        HandlerUtils.postRunnable(runnable, delayMillis);
        return this;
    }

    /**
     * 在主线程 Handler 中执行延迟任务
     * @param runnable    可执行的任务
     * @param delayMillis 延迟时间
     * @param number      轮询次数
     * @param interval    轮询时间
     * @return {@link DevHelper}
     */
    public DevHelper postRunnable(final Runnable runnable, final long delayMillis, final int number, final int interval) {
        HandlerUtils.postRunnable(runnable, delayMillis, number, interval);
        return this;
    }

    /**
     * 在主线程 Handler 中执行延迟任务
     * @param runnable      可执行的任务
     * @param delayMillis   延迟时间
     * @param number        轮询次数
     * @param interval      轮询时间
     * @param onEndListener 结束通知
     * @return {@link DevHelper}
     */
    public DevHelper postRunnable(final Runnable runnable, final long delayMillis, final int number, final int interval, final HandlerUtils.OnEndListener onEndListener) {
        HandlerUtils.postRunnable(runnable, delayMillis, number, interval, onEndListener);
        return this;
    }

    /**
     * 在主线程 Handler 中清除任务
     * @param runnable 需要清除的任务
     * @return {@link DevHelper}
     */
    public DevHelper removeRunnable(final Runnable runnable) {
        HandlerUtils.removeRunnable(runnable);
        return this;
    }

    // ================
    // = TimerManager =
    // ================

    /**
     * 运行定时器
     * @param timer {@link TimerManager.AbsTimer}
     * @return {@link DevHelper}
     */
    public DevHelper startTimer(final TimerManager.AbsTimer timer) {
        if (timer != null) timer.startTimer();
        return this;
    }

    /**
     * 关闭定时器
     * @param timer {@link TimerManager.AbsTimer}
     * @return {@link DevHelper}
     */
    public DevHelper closeTimer(final TimerManager.AbsTimer timer) {
        if (timer != null) timer.closeTimer();
        return this;
    }

    // ===============
    // = BitmapUtils =
    // ===============

    /**
     * Bitmap 通知回收
     * @param bitmap 待回收图片
     * @return {@link DevHelper}
     */
    public DevHelper recycle(final Bitmap bitmap) {
        BitmapUtils.recycle(bitmap);
        return this;
    }

    // ==============
    // = ImageUtils =
    // ==============

    /**
     * 保存图片到 SDCard - JPEG
     * @param bitmap   待保存图片
     * @param filePath 保存路径
     * @return {@link DevHelper}
     */
    public DevHelper saveBitmapToSDCardJPEG(final Bitmap bitmap, final String filePath) {
        return saveBitmapToSDCard(bitmap, filePath, Bitmap.CompressFormat.JPEG, 100);
    }

    /**
     * 保存图片到 SDCard - JPEG
     * @param bitmap 待保存图片
     * @param file   保存路径
     * @return {@link DevHelper}
     */
    public DevHelper saveBitmapToSDCardJPEG(final Bitmap bitmap, final File file) {
        return saveBitmapToSDCard(bitmap, file, Bitmap.CompressFormat.JPEG, 100);
    }

    // =

    /**
     * 保存图片到 SDCard - JPEG
     * @param bitmap   待保存图片
     * @param filePath 保存路径
     * @param quality  质量
     * @return {@link DevHelper}
     */
    public DevHelper saveBitmapToSDCardJPEG(final Bitmap bitmap, final String filePath,
                                            @IntRange(from = 0, to = 100) final int quality) {
        return saveBitmapToSDCard(bitmap, filePath, Bitmap.CompressFormat.JPEG, quality);
    }

    /**
     * 保存图片到 SDCard - JPEG
     * @param bitmap  待保存图片
     * @param file    保存路径
     * @param quality 质量
     * @return {@link DevHelper}
     */
    public DevHelper saveBitmapToSDCardJPEG(final Bitmap bitmap, final File file,
                                            @IntRange(from = 0, to = 100) final int quality) {
        return saveBitmapToSDCard(bitmap, file, Bitmap.CompressFormat.JPEG, quality);
    }

    // =

    /**
     * 保存图片到 SDCard - PNG
     * @param bitmap   待保存图片
     * @param filePath 保存路径
     * @return {@link DevHelper}
     */
    public DevHelper saveBitmapToSDCardPNG(final Bitmap bitmap, final String filePath) {
        return saveBitmapToSDCard(bitmap, filePath, Bitmap.CompressFormat.PNG, 100);
    }

    /**
     * 保存图片到 SDCard - PNG
     * @param bitmap 待保存图片
     * @param file   保存路径
     * @return {@link DevHelper}
     */
    public DevHelper saveBitmapToSDCardPNG(final Bitmap bitmap, final File file) {
        return saveBitmapToSDCard(bitmap, file, Bitmap.CompressFormat.PNG, 100);
    }

    // =

    /**
     * 保存图片到 SDCard - PNG
     * @param bitmap   待保存图片
     * @param filePath 保存路径
     * @param quality  质量
     * @return {@link DevHelper}
     */
    public DevHelper saveBitmapToSDCardPNG(final Bitmap bitmap, final String filePath,
                                           @IntRange(from = 0, to = 100) final int quality) {
        return saveBitmapToSDCard(bitmap, filePath, Bitmap.CompressFormat.PNG, quality);
    }

    /**
     * 保存图片到 SDCard - PNG
     * @param bitmap  待保存图片
     * @param file    保存路径
     * @param quality 质量
     * @return {@link DevHelper}
     */
    public DevHelper saveBitmapToSDCardPNG(final Bitmap bitmap, final File file,
                                           @IntRange(from = 0, to = 100) final int quality) {
        return saveBitmapToSDCard(bitmap, file, Bitmap.CompressFormat.PNG, quality);
    }

    // =

    /**
     * 保存图片到 SDCard - WEBP
     * @param bitmap   待保存图片
     * @param filePath 保存路径
     * @return {@link DevHelper}
     */
    public DevHelper saveBitmapToSDCardWEBP(final Bitmap bitmap, final String filePath) {
        return saveBitmapToSDCard(bitmap, filePath, Bitmap.CompressFormat.WEBP, 100);
    }

    /**
     * 保存图片到 SDCard - WEBP
     * @param bitmap 待保存图片
     * @param file   保存路径
     * @return {@link DevHelper}
     */
    public DevHelper saveBitmapToSDCardWEBP(final Bitmap bitmap, final File file) {
        return saveBitmapToSDCard(bitmap, file, Bitmap.CompressFormat.WEBP, 100);
    }

    // =

    /**
     * 保存图片到 SDCard - WEBP
     * @param bitmap   待保存图片
     * @param filePath 保存路径
     * @param quality  质量
     * @return {@link DevHelper}
     */
    public DevHelper saveBitmapToSDCardWEBP(final Bitmap bitmap, final String filePath,
                                            @IntRange(from = 0, to = 100) final int quality) {
        return saveBitmapToSDCard(bitmap, filePath, Bitmap.CompressFormat.WEBP, quality);
    }

    /**
     * 保存图片到 SDCard - WEBP
     * @param bitmap  待保存图片
     * @param file    保存路径
     * @param quality 质量
     * @return {@link DevHelper}
     */
    public DevHelper saveBitmapToSDCardWEBP(final Bitmap bitmap, final File file,
                                            @IntRange(from = 0, to = 100) final int quality) {
        return saveBitmapToSDCard(bitmap, file, Bitmap.CompressFormat.WEBP, quality);
    }

    // =

    /**
     * 保存图片到 SDCard
     * @param bitmap   待保存图片
     * @param filePath 保存路径
     * @param format   如 Bitmap.CompressFormat.PNG
     * @param quality  质量
     * @return {@link DevHelper}
     */
    public DevHelper saveBitmapToSDCard(final Bitmap bitmap, final String filePath, final Bitmap.CompressFormat format,
                                        @IntRange(from = 0, to = 100) final int quality) {
        ImageUtils.saveBitmapToSDCard(bitmap, filePath, format, quality);
        return this;
    }

    /**
     * 保存图片到 SDCard
     * @param bitmap  待保存图片
     * @param file    保存路径
     * @param format  如 Bitmap.CompressFormat.PNG
     * @param quality 质量
     * @return {@link DevHelper}
     */
    public DevHelper saveBitmapToSDCard(final Bitmap bitmap, final File file, final Bitmap.CompressFormat format,
                                        @IntRange(from = 0, to = 100) final int quality) {
        ImageUtils.saveBitmapToSDCard(bitmap, file, format, quality);
        return this;
    }

    // =================
    // = EditTextUtils =
    // =================

    /**
     * 添加输入监听事件
     * @param editText {@link EditText}
     * @param watcher  输入监听
     * @return {@link DevHelper}
     */
    public DevHelper addTextChangedListener(final EditText editText, final TextWatcher watcher) {
        EditTextUtils.addTextChangedListener(editText, watcher);
        return this;
    }

    /**
     * 移除输入监听事件
     * @param editText {@link EditText}
     * @param watcher  输入监听
     * @return {@link DevHelper}
     */
    public DevHelper removeTextChangedListener(final EditText editText, final TextWatcher watcher) {
        EditTextUtils.removeTextChangedListener(editText, watcher);
        return this;
    }

    /**
     * 设置 KeyListener
     * @param editText    {@link EditText}
     * @param keyListener {@link KeyListener}
     * @return {@link DevHelper}
     */
    public DevHelper setKeyListener(final EditText editText, final KeyListener keyListener) {
        EditTextUtils.setKeyListener(editText, keyListener);
        return this;
    }

    /**
     * 设置 KeyListener
     * @param editText {@link EditText}
     * @param accepted 允许输入的内容, 如: 0123456789
     * @return {@link DevHelper}
     */
    public DevHelper setKeyListener(final EditText editText, final String accepted) {
        EditTextUtils.setKeyListener(editText, accepted);
        return this;
    }

    /**
     * 设置 KeyListener
     * @param editText {@link EditText}
     * @param accepted 允许输入的内容
     * @return {@link DevHelper}
     */
    public DevHelper setKeyListener(final EditText editText, final char[] accepted) {
        EditTextUtils.setKeyListener(editText, accepted);
        return this;
    }

    // =======================
    // = AnalysisRecordUtils =
    // =======================

    /**
     * 日志记录
     * @param fileInfo {@link AnalysisRecordUtils.FileInfo}
     * @param logs     日志内容数组
     * @return {@link DevHelper}
     */
    public DevHelper record(final AnalysisRecordUtils.FileInfo fileInfo, final String... logs) {
        AnalysisRecordUtils.record(fileInfo, logs);
        return this;
    }

    // ==============
    // = CleanUtils =
    // ==============

    /**
     * 清除内部缓存 - path /data/data/package/cache
     * @return {@link DevHelper}
     */
    public DevHelper cleanInternalCache() {
        CleanUtils.cleanInternalCache();
        return this;
    }

    /**
     * 清除内部文件 - path /data/data/package/files
     * @return {@link DevHelper}
     */
    public DevHelper cleanInternalFiles() {
        CleanUtils.cleanInternalFiles();
        return this;
    }

    /**
     * 清除内部数据库 - path /data/data/package/databases
     * @return {@link DevHelper}
     */
    public DevHelper cleanInternalDbs() {
        CleanUtils.cleanInternalDbs();
        return this;
    }

    /**
     * 根据名称清除数据库 - path /data/data/package/databases/dbName
     * @param dbName 数据库名
     * @return {@link DevHelper}
     */
    public DevHelper cleanInternalDbByName(final String dbName) {
        CleanUtils.cleanInternalDbByName(dbName);
        return this;
    }

    /**
     * 清除内部 SP - path /data/data/package/shared_prefs
     * @return {@link DevHelper}
     */
    public DevHelper cleanInternalSp() {
        CleanUtils.cleanInternalSp();
        return this;
    }

    /**
     * 清除外部缓存 - path /storage/emulated/0/android/data/package/cache
     * @return {@link DevHelper}
     */
    public DevHelper cleanExternalCache() {
        CleanUtils.cleanExternalCache();
        return this;
    }

    // =

    /**
     * 清除自定义路径下的文件, 使用需小心请不要误删, 而且只支持目录下的文件删除
     * @param filePath 文件路径
     * @return {@link DevHelper}
     */
    public DevHelper cleanCustomDir(final String filePath) {
        CleanUtils.cleanCustomDir(filePath);
        return this;
    }

    /**
     * 清除自定义路径下的文件, 使用需小心请不要误删, 而且只支持目录下的文件删除
     * @param file 文件路径
     * @return {@link DevHelper}
     */
    public DevHelper cleanCustomDir(final File file) {
        CleanUtils.cleanCustomDir(file);
        return this;
    }

    /**
     * 清除本应用所有的数据
     * @param filePaths 文件路径数组
     * @return {@link DevHelper}
     */
    public DevHelper cleanApplicationData(final String... filePaths) {
        CleanUtils.cleanApplicationData(filePaths);
        return this;
    }

    // ==================
    // = ClipboardUtils =
    // ==================

    /**
     * 复制文本到剪贴板
     * @param text 文本
     * @return {@link DevHelper}
     */
    public DevHelper copyText(final CharSequence text) {
        ClipboardUtils.copyText(text);
        return this;
    }

    /**
     * 复制 URI 到剪贴板
     * @param uri {@link Uri}
     * @return {@link DevHelper}
     */
    public DevHelper copyUri(final Uri uri) {
        ClipboardUtils.copyUri(uri);
        return this;
    }

    /**
     * 复制意图到剪贴板
     * @param intent 意图
     * @return {@link DevHelper}
     */
    public DevHelper copyIntent(final Intent intent) {
        ClipboardUtils.copyIntent(intent);
        return this;
    }

    // ========================
    // = ContentResolverUtils =
    // ========================

    /**
     * 通知刷新本地资源
     * @param file 文件
     * @return {@link DevHelper}
     */
    public DevHelper notifyMediaStore(final File file) {
        ContentResolverUtils.notifyMediaStore(file);
        return this;
    }

    /**
     * 添加图片到系统相册 ( 包含原图、相册图, 会存在两张 ) - 想要一张, 直接调用 notifyMediaStore()
     * @param file     文件
     * @param fileName 文件名
     * @param isNotify 是否广播通知图库扫描
     * @return {@link DevHelper}
     */
    public DevHelper insertImageIntoMediaStore(final File file, final String fileName, final boolean isNotify) {
        ContentResolverUtils.insertImageIntoMediaStore(file, fileName, isNotify);
        return this;
    }

    // =

    /**
     * 添加视频到系统相册
     * @param file 文件
     * @return {@link DevHelper}
     */
    public DevHelper insertVideoIntoMediaStore(final File file) {
        ContentResolverUtils.insertVideoIntoMediaStore(file);
        return this;
    }

    /**
     * 保存到系统相册
     * @param file       文件
     * @param createTime 创建时间
     * @param isVideo    是否视频
     * @param mimeType   资源类型
     * @return {@link DevHelper}
     */
    public DevHelper insertIntoMediaStore(final File file, final long createTime, final boolean isVideo, final String mimeType) {
        ContentResolverUtils.insertIntoMediaStore(file, createTime, isVideo, mimeType);
        return this;
    }

    // ===============
    // = DialogUtils =
    // ===============

    /**
     * 显示 Dialog
     * @param dialog {@link Dialog}
     * @param <T>    泛型
     * @return {@link DevHelper}
     */
    public <T extends Dialog> DevHelper showDialog(final T dialog) {
        DialogUtils.showDialog(dialog);
        return this;
    }

    /**
     * 关闭 Dialog
     * @param dialog {@link Dialog}
     * @return {@link DevHelper}
     */
    public DevHelper closeDialog(final Dialog dialog) {
        DialogUtils.closeDialog(dialog);
        return this;
    }

    /**
     * 关闭多个 Dialog
     * @param dialogs {@link Dialog} 数组
     * @return {@link DevHelper}
     */
    public DevHelper closeDialogs(final Dialog... dialogs) {
        DialogUtils.closeDialogs(dialogs);
        return this;
    }

    // =

    /**
     * 关闭 DialogFragment
     * @param dialog {@link DialogFragment}
     * @return {@link DevHelper}
     */
    public DevHelper closeDialog(final DialogFragment dialog) {
        DialogUtils.closeDialog(dialog);
        return this;
    }

    /**
     * 关闭多个 DialogFragment
     * @param dialogs {@link DialogFragment} 数组
     * @return {@link DevHelper}
     */
    public DevHelper closeDialogs(final DialogFragment... dialogs) {
        DialogUtils.closeDialogs(dialogs);
        return this;
    }

    // =

    /**
     * 关闭 PopupWindow
     * @param popupWindow {@link PopupWindow}
     * @return {@link DevHelper}
     */
    public DevHelper closePopupWindow(final PopupWindow popupWindow) {
        DialogUtils.closePopupWindow(popupWindow);
        return this;
    }

    /**
     * 关闭多个 PopupWindow
     * @param popupWindows {@link PopupWindow} 数组
     * @return {@link DevHelper}
     */
    public DevHelper closePopupWindows(final PopupWindow... popupWindows) {
        DialogUtils.closePopupWindows(popupWindows);
        return this;
    }

    // =

    /**
     * 自动关闭 dialog
     * @param dialog      {@link Dialog}
     * @param delayMillis 延迟关闭时间
     * @param handler     {@link Handler}
     * @param <T>         泛型
     * @return {@link DevHelper}
     */
    public <T extends Dialog> DevHelper autoCloseDialog(final T dialog, final long delayMillis, final Handler handler) {
        DialogUtils.autoCloseDialog(dialog, delayMillis, handler);
        return this;
    }

    /**
     * 自动关闭 DialogFragment
     * @param dialog      {@link DialogFragment}
     * @param delayMillis 延迟关闭时间
     * @param handler     {@link Handler}
     * @param <T>         泛型
     * @return {@link DevHelper}
     */
    public <T extends DialogFragment> DevHelper autoCloseDialog(final T dialog, final long delayMillis, final Handler handler) {
        DialogUtils.autoCloseDialog(dialog, delayMillis, handler);
        return this;
    }

    /**
     * 自动关闭 PopupWindow
     * @param popupWindow {@link PopupWindow}
     * @param delayMillis 延迟关闭时间
     * @param handler     {@link Handler}
     * @param <T>         泛型
     * @return {@link DevHelper}
     */
    public <T extends PopupWindow> DevHelper autoClosePopupWindow(final T popupWindow, final long delayMillis, final Handler handler) {
        DialogUtils.autoClosePopupWindow(popupWindow, delayMillis, handler);
        return this;
    }

    // =================
    // = KeyBoardUtils =
    // =================

    // ==============
    // = 打开软键盘 =
    // ==============

    /**
     * 打开软键盘
     * @param editText {@link EditText}
     * @return {@link DevHelper}
     */
    public DevHelper openKeyboard(final EditText editText) {
        KeyBoardUtils.openKeyboard(editText);
        return this;
    }

    /**
     * 打开软键盘
     * @param editText {@link EditText}
     * @param handler  {@link Handler}
     * @return {@link DevHelper}
     */
    public DevHelper openKeyboard(final EditText editText, final Handler handler) {
        KeyBoardUtils.openKeyboard(editText, handler);
        return this;
    }

    /**
     * 打开软键盘
     * @param editText    {@link EditText}
     * @param handler     {@link Handler}
     * @param delayMillis 延迟时间 ( 毫秒 )
     * @return {@link DevHelper}
     */
    public DevHelper openKeyboard(final EditText editText, final Handler handler, final int delayMillis) {
        KeyBoardUtils.openKeyboard(editText, handler, delayMillis);
        return this;
    }

    // =

    /**
     * 打开软键盘
     * @return {@link DevHelper}
     */
    public DevHelper openKeyboard() {
        KeyBoardUtils.openKeyboard();
        return this;
    }

    /**
     * 打开软键盘
     * @param handler {@link Handler}
     * @return {@link DevHelper}
     */
    public DevHelper openKeyboard(final Handler handler) {
        KeyBoardUtils.openKeyboard(handler);
        return this;
    }

    /**
     * 打开软键盘
     * @param handler     {@link Handler}
     * @param delayMillis 延迟时间 ( 毫秒 )
     * @return {@link DevHelper}
     */
    public DevHelper openKeyboard(final Handler handler, final int delayMillis) {
        KeyBoardUtils.openKeyboard(handler, delayMillis);
        return this;
    }

    // ==============
    // = 关闭软键盘 =
    // ==============

    /**
     * 关闭软键盘
     * @param editText {@link EditText}
     * @return {@link DevHelper}
     */
    public DevHelper closeKeyboard(final EditText editText) {
        KeyBoardUtils.closeKeyboard(editText);
        return this;
    }

    /**
     * 关闭软键盘
     * @return {@link DevHelper}
     */
    public DevHelper closeKeyboard() {
        KeyBoardUtils.closeKeyboard();
        return this;
    }

    /**
     * 关闭软键盘
     * @param activity {@link Activity}
     * @return {@link DevHelper}
     */
    public DevHelper closeKeyboard(final Activity activity) {
        KeyBoardUtils.closeKeyboard(activity);
        return this;
    }

    /**
     * 关闭 dialog 中打开的键盘
     * @param dialog {@link Dialog}
     * @return {@link DevHelper}
     */
    public DevHelper closeKeyboard(final Dialog dialog) {
        KeyBoardUtils.closeKeyboard(dialog);
        return this;
    }

    // =

    /**
     * 关闭软键盘 - 特殊处理
     * @param editText {@link EditText}
     * @param dialog   {@link Dialog}
     * @return {@link DevHelper}
     */
    public DevHelper closeKeyBoardSpecial(final EditText editText, final Dialog dialog) {
        KeyBoardUtils.closeKeyBoardSpecial(editText, dialog);
        return this;
    }

    /**
     * 关闭软键盘 - 特殊处理
     * @param editText {@link EditText}
     * @param dialog   {@link Dialog}
     * @param handler  {@link Handler}
     * @return {@link DevHelper}
     */
    public DevHelper closeKeyBoardSpecial(final EditText editText, final Dialog dialog, final Handler handler) {
        KeyBoardUtils.closeKeyBoardSpecial(editText, dialog, handler);
        return this;
    }

    /**
     * 关闭软键盘 - 特殊处理 ( 两个都关闭 )
     * @param editText    {@link EditText}
     * @param dialog      {@link Dialog}
     * @param handler     {@link Handler}
     * @param delayMillis 延迟时间 ( 毫秒 )
     * @return {@link DevHelper}
     */
    public DevHelper closeKeyBoardSpecial(final EditText editText, final Dialog dialog, final Handler handler, final int delayMillis) {
        KeyBoardUtils.closeKeyBoardSpecial(editText, dialog, handler, delayMillis);
        return this;
    }

    // =

    /**
     * 关闭软键盘
     * @param editText {@link EditText}
     * @param handler  {@link Handler}
     * @return {@link DevHelper}
     */
    public DevHelper closeKeyboard(final EditText editText, final Handler handler) {
        KeyBoardUtils.closeKeyboard(editText, handler);
        return this;
    }

    /**
     * 关闭软键盘
     * @param editText    {@link EditText}
     * @param handler     {@link Handler}
     * @param delayMillis 延迟时间 ( 毫秒 )
     * @return {@link DevHelper}
     */
    public DevHelper closeKeyboard(final EditText editText, final Handler handler, final int delayMillis) {
        KeyBoardUtils.closeKeyboard(editText, handler, delayMillis);
        return this;
    }

    /**
     * 关闭软键盘
     * @param handler {@link Handler}
     * @return {@link DevHelper}
     */
    public DevHelper closeKeyboard(final Handler handler) {
        KeyBoardUtils.closeKeyboard(handler);
        return this;
    }

    /**
     * 关闭软键盘
     * @param handler     {@link Handler}
     * @param delayMillis 延迟时间 ( 毫秒 )
     * @return {@link DevHelper}
     */
    public DevHelper closeKeyboard(final Handler handler, final int delayMillis) {
        KeyBoardUtils.closeKeyboard(handler, delayMillis);
        return this;
    }

    /**
     * 关闭软键盘
     * @param activity {@link Activity}
     * @param handler  {@link Handler}
     * @return {@link DevHelper}
     */
    public DevHelper closeKeyboard(final Activity activity, final Handler handler) {
        KeyBoardUtils.closeKeyboard(activity, handler);
        return this;
    }

    /**
     * 关闭软键盘
     * @param activity    {@link Activity}
     * @param handler     {@link Handler}
     * @param delayMillis 延迟时间 ( 毫秒 )
     * @return {@link DevHelper}
     */
    public DevHelper closeKeyboard(final Activity activity, final Handler handler, final int delayMillis) {
        KeyBoardUtils.closeKeyboard(activity, handler, delayMillis);
        return this;
    }

    /**
     * 关闭软键盘
     * @param dialog  {@link Dialog}
     * @param handler {@link Handler}
     * @return {@link DevHelper}
     */
    public DevHelper closeKeyboard(final Dialog dialog, final Handler handler) {
        KeyBoardUtils.closeKeyboard(dialog, handler);
        return this;
    }

    /**
     * 关闭软键盘
     * @param dialog      {@link Dialog}
     * @param handler     {@link Handler}
     * @param delayMillis 延迟时间 ( 毫秒 )
     * @return {@link DevHelper}
     */
    public DevHelper closeKeyboard(final Dialog dialog, final Handler handler, final int delayMillis) {
        KeyBoardUtils.closeKeyboard(dialog, handler, delayMillis);
        return this;
    }

    // ================================
    // = 点击非 EditText 则隐藏输入法 =
    // ================================

    /**
     * 设置某个 View 内所有非 EditText 的子 View OnTouchListener 事件
     * @param view     {@link View}
     * @param activity {@link Activity}
     * @return {@link DevHelper}
     */
    public DevHelper judgeView(final View view, final Activity activity) {
        KeyBoardUtils.judgeView(view, activity);
        return this;
    }

    /**
     * 注册软键盘改变监听
     * @param activity {@link Activity}
     * @param listener {@link KeyBoardUtils.OnSoftInputChangedListener}
     * @return {@link DevHelper}
     */
    public DevHelper registerSoftInputChangedListener(final Activity activity, final KeyBoardUtils.OnSoftInputChangedListener listener) {
        KeyBoardUtils.registerSoftInputChangedListener(activity, listener);
        return this;
    }

    /**
     * 注册软键盘改变监听
     * @param activity {@link Activity}
     * @param listener {@link KeyBoardUtils.OnSoftInputChangedListener}
     * @return {@link DevHelper}
     */
    public DevHelper registerSoftInputChangedListener2(final Activity activity, final KeyBoardUtils.OnSoftInputChangedListener listener) {
        KeyBoardUtils.registerSoftInputChangedListener2(activity, listener);
        return this;
    }

    // =================
    // = LanguageUtils =
    // =================

    /**
     * 修改系统语言 (APP 多语言, 单独改变 APP 语言 )
     * @param context {@link Context}
     * @param locale  {@link Locale}
     * @return {@link DevHelper}
     */
    public DevHelper applyLanguage(final Context context, final Locale locale) {
        LanguageUtils.applyLanguage(context, locale);
        return this;
    }

    /**
     * 修改系统语言 (APP 多语言, 单独改变 APP 语言 )
     * @param context  {@link Context}
     * @param language 语言
     * @return {@link DevHelper}
     */
    public DevHelper applyLanguage(final Context context, final String language) {
        LanguageUtils.applyLanguage(context, language);
        return this;
    }

    // =================
    // = ListenerUtils =
    // =================

    /**
     * 设置点击事件
     * @param onClickListener {@link View.OnClickListener}
     * @param views           View 数组
     * @return {@link DevHelper}
     */
    public DevHelper setOnClicks(final View.OnClickListener onClickListener, final View... views) {
        ListenerUtils.setOnClicks(onClickListener, views);
        return this;
    }

    /**
     * 设置长按事件
     * @param onLongClickListener {@link View.OnLongClickListener}
     * @param views               View 数组
     * @return {@link DevHelper}
     */
    public DevHelper setOnLongClicks(final View.OnLongClickListener onLongClickListener, final View... views) {
        ListenerUtils.setOnLongClicks(onLongClickListener, views);
        return this;
    }

    /**
     * 增加控件的触摸范围, 最大范围只能是父布局所包含的的区域
     * @param view  待添加点击范围 View
     * @param range 点击范围
     * @return {@link DevHelper}
     */
    public DevHelper addTouchArea(final View view, final int range) {
        ClickUtils.addTouchArea(view, range);
        return this;
    }

    /**
     * 增加控件的触摸范围, 最大范围只能是父布局所包含的的区域
     * @param view   待添加点击范围 View
     * @param top    top range
     * @param bottom bottom range
     * @param left   left range
     * @param right  right range
     * @return {@link DevHelper}
     */
    public DevHelper addTouchArea(final View view, final int top, final int bottom, final int left, final int right) {
        ClickUtils.addTouchArea(view, top, bottom, left, right);
        return this;
    }

    // =====================
    // = NotificationUtils =
    // =====================

    /**
     * 移除通知 - 移除所有通知 ( 只是针对当前 Context 下的 Notification)
     * @return {@link DevHelper}
     */
    public DevHelper cancelAllNotification() {
        NotificationUtils.cancelAll();
        return this;
    }

    /**
     * 移除通知 - 移除标记为 id 的通知 ( 只是针对当前 Context 下的所有 Notification)
     * @param args 消息 id 集合
     * @return {@link DevHelper}
     */
    public DevHelper cancelNotification(final int... args) {
        NotificationUtils.cancel(args);
        return this;
    }

    /**
     * 移除通知 - 移除标记为 id 的通知 ( 只是针对当前 Context 下的所有 Notification)
     * @param tag 标记 TAG
     * @param id  消息 id
     * @return {@link DevHelper}
     */
    public DevHelper cancelNotification(final String tag, final int id) {
        NotificationUtils.cancel(tag, id);
        return this;
    }

    /**
     * 进行通知
     * @param id           消息 id
     * @param notification {@link Notification}
     * @return {@link DevHelper}
     */
    public DevHelper notifyNotification(final int id, final Notification notification) {
        NotificationUtils.notify(id, notification);
        return this;
    }

    /**
     * 进行通知
     * @param tag          标记 TAG
     * @param id           消息 id
     * @param notification {@link Notification}
     * @return {@link DevHelper}
     */
    public DevHelper notifyNotification(final String tag, final int id, final Notification notification) {
        NotificationUtils.notify(tag, id, notification);
        return this;
    }

    // =================
    // = ResourceUtils =
    // =================

    /**
     * 获取 Assets 资源文件数据并保存到本地
     * @param fileName 文件名
     * @param file     文件保存地址
     * @return {@link DevHelper}
     */
    public DevHelper saveAssetsFormFile(final String fileName, final File file) {
        ResourceUtils.saveAssetsFormFile(fileName, file);
        return this;
    }

    /**
     * 获取 Raw 资源文件数据并保存到本地
     * @param resId 资源 id
     * @param file  文件保存地址
     * @return {@link DevHelper}
     */
    public DevHelper saveRawFormFile(@RawRes final int resId, final File file) {
        ResourceUtils.saveRawFormFile(resId, file);
        return this;
    }

    // ===============
    // = ScreenUtils =
    // ===============

    /**
     * 设置禁止截屏
     * @param activity {@link Activity}
     * @return {@link DevHelper}
     */
    public DevHelper setWindowSecure(final Activity activity) {
        ScreenUtils.setWindowSecure(activity);
        return this;
    }

    /**
     * 设置屏幕为全屏
     * @param activity {@link Activity}
     * @return {@link DevHelper}
     */
    public DevHelper setFullScreen(final Activity activity) {
        ScreenUtils.setFullScreen(activity);
        return this;
    }

    /**
     * 设置屏幕为横屏
     * @param activity {@link Activity}
     * @return {@link DevHelper}
     */
    public DevHelper setLandscape(final Activity activity) {
        ScreenUtils.setLandscape(activity);
        return this;
    }

    /**
     * 设置屏幕为竖屏
     * @param activity {@link Activity}
     * @return {@link DevHelper}
     */
    public DevHelper setPortrait(final Activity activity) {
        ScreenUtils.setPortrait(activity);
        return this;
    }

    /**
     * 切换屏幕方向
     * @param activity {@link Activity}
     * @return {@link DevHelper}
     */
    public DevHelper toggleScreenOrientation(final Activity activity) {
        ScreenUtils.toggleScreenOrientation(activity);
        return this;
    }

    // =============
    // = SizeUtils =
    // =============

    /**
     * 在 onCreate 中获取视图的尺寸 - 需回调 onGetSizeListener 接口, 在 onGetSize 中获取 View 宽高
     * @param view     {@link View}
     * @param listener {@link SizeUtils.onGetSizeListener}
     * @return {@link DevHelper}
     */
    public DevHelper forceGetViewSize(final View view, final SizeUtils.onGetSizeListener listener) {
        SizeUtils.forceGetViewSize(view, listener);
        return this;
    }

    // ==================
    // = VibrationUtils =
    // ==================

    /**
     * 震动
     * @param milliseconds 震动时长 ( 毫秒 )
     * @return {@link DevHelper}
     */
    @SuppressLint("MissingPermission")
    public DevHelper vibrate(final long milliseconds) {
        VibrationUtils.vibrate(milliseconds);
        return this;
    }

    /**
     * pattern 模式震动
     * @param pattern new long[]{400, 800, 1200, 1600}, 就是指定在 400ms、800ms、1200ms、1600ms 这些时间点交替启动、关闭手机震动器
     * @param repeat  指定 pattern 数组的索引, 指定 pattern 数组中从 repeat 索引开始的震动进行循环,
     *                -1 表示只震动一次, 非 -1 表示从 pattern 数组指定下标开始重复震动
     * @return {@link DevHelper}
     */
    @SuppressLint("MissingPermission")
    public DevHelper vibrate(final long[] pattern, final int repeat) {
        VibrationUtils.vibrate(pattern, repeat);
        return this;
    }

    /**
     * 取消震动
     * @return {@link DevHelper}
     */
    @SuppressLint("MissingPermission")
    public DevHelper cancel() {
        VibrationUtils.cancel();
        return this;
    }

    // ==============
    // = CloseUtils =
    // ==============

    /**
     * 关闭 IO
     * @param closeables Closeable[]
     * @return {@link DevHelper}
     */
    public DevHelper closeIO(final Closeable... closeables) {
        CloseUtils.closeIO(closeables);
        return this;
    }

    /**
     * 安静关闭 IO
     * @param closeables Closeable[]
     * @return {@link DevHelper}
     */
    public DevHelper closeIOQuietly(final Closeable... closeables) {
        CloseUtils.closeIOQuietly(closeables);
        return this;
    }

    // ==========================
    // = HttpURLConnectionUtils =
    // ==========================

    /**
     * 获取网络时间 - 默认使用百度链接
     * @param timeCallBack 请求时间回调接口
     * @return {@link DevHelper}
     */
    public DevHelper getNetTime(final HttpURLConnectionUtils.TimeCallBack timeCallBack) {
        HttpURLConnectionUtils.getNetTime(timeCallBack);
        return this;
    }

    /**
     * 获取网络时间
     * @param urlStr       请求地址
     * @param timeCallBack 请求时间回调接口
     * @return {@link DevHelper}
     */
    public DevHelper getNetTime(final String urlStr, final HttpURLConnectionUtils.TimeCallBack timeCallBack) {
        HttpURLConnectionUtils.getNetTime(urlStr, timeCallBack);
        return this;
    }

    // ==============
    // = TimeKeeper =
    // ==============

    /**
     * 设置等待一段时间后, 通知方法 ( 异步 )
     * @param keepTimeMillis 堵塞时间 ( 毫秒 )
     * @param endCallback    结束回调通知
     * @return {@link DevHelper}
     */
    public DevHelper waitForEndAsyn(final long keepTimeMillis, final TimeKeeper.OnEndCallback endCallback) {
        mTimeKeeper.waitForEndAsyn(keepTimeMillis, endCallback);
        return this;
    }

    /**
     * 设置等待一段时间后, 通知方法 ( 同步 )
     * @param keepTimeMillis 堵塞时间 ( 毫秒 )
     * @param endCallback    结束回调通知
     * @return {@link DevHelper}
     */
    public DevHelper waitForEnd(final long keepTimeMillis, final TimeKeeper.OnEndCallback endCallback) {
        mTimeKeeper.waitForEnd(keepTimeMillis, endCallback);
        return this;
    }

    // ==================
    // = AnimationUtils =
    // ==================

    /**
     * 设置动画事件
     * @param animation {@link Animation}
     * @param listener  {@link Animation.AnimationListener}
     * @return {@link DevHelper}
     */
    public DevHelper setAnimationListener(final Animation animation, final Animation.AnimationListener listener) {
        AnimationUtils.setAnimationListener(animation, listener);
        return this;
    }
}
AndroidHelper.exe 立即下载

相关推荐

android 调用系统联系人列表工具类

android 调用系统联系人列表工具类,两种方式进行处理。

android 非官方应用,用xposed绕过重签名后qq登录显示“非官方正版应用”的验证...

[Java] 纯文本查看 复制代码package com.cy.qq;import android.app.AndroidAppHelper;import de.robv.android.xposed.IXposedHookLoadPackage;import de.robv.android.xposed.XC_MethodHook;import de.robv.android.xposed.Xp...

weixin_42413624的博客 1652

AppIntent资源阅读

对AppIntent这篇论文进行了一个大致的介绍。

Android 自定义dialog并链式调用

1.首先定义一个xml文件,制定我们需要的dialog样式 &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" andro...

Mydtudysy的博客 645

Android-android简单的链式线程切换工具类简单适用可用于学习线程相关知识

android简单的链式线程切换工具类,简单适用,可用于学习线程相关知识

android 数据库锁的问题

最近在项目中遇到一个错误: 12-26 17:29:10.501 32592 32644 W SQLiteConnectionPool: The connection pool for database '***.db' has been unable to grant a connection to thread 1378 (thread-pool-0) with flags 0x2 for...

低调的成长 2903

python androidhelper kivy_学习qpython相关-Go语言中文社区

QPython弹窗显示消息import androidhelperdroid = androidhelper.Android()droid.makeToast('Hello, Username!')防止导入时出错,与sl4a冲突可以用try:import androidhelper as androidexcept ImportError:import android```####通过对话框的形式...

weixin_39921504的博客 359

金融科技数据源

数字金融开放研究平台

平平淡淡,戒急用忍,一生学闭嘴。 1758

Android Helper 帮助类

&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:backgr...

闫瑞锋的博客 4044

ZYNQ:【1】深入理解PS端的TTC定时器(Part1:原理+官方案例讲解)

基于UG585详细讲解其中TTC的原理和使用案例。

Alex的技术博客 7886

STC51单片机串口多字节数据接收的优化策略

本文深入探讨了STC51单片机串口多字节数据接收的优化策略。针对数据丢包、粘包等常见痛点,核心思路是采用“缓冲队列+定时器超时”模式,将实时处理转变为“先收纳,后处理”。文章详细讲解了硬件初始化、中断服务程序优化(快速入队与激活超时裁判)以及主循环的非阻塞设计,并进阶介绍了环形缓冲区实现与错误处理,旨在构建稳定可靠的串口通信系统。

weixin_29264201的博客 374

Android中Helper帮助类

package com.huaiye.ecs.common.utils; import android.app.Activity; import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; import android.content.Inte

day_smile的博客 6680

ComfyUI-controlnet控制出图

提供加载预处理器节点。

Bu2n的博客 5494

GLM-5.1与MiniMax-M2.7协同驱动的工程级AI编码实践

AI辅助编程已从单模型通用生成迈入多模型协同的工程化新阶段。其核心在于将大模型能力解耦为可编排、可验证、可嵌入软件开发流水线的原子单元——逻辑强推理模型(如GLM-5.1)负责需求理解与架构设计,轻量确定性模型(如MiniMax-M2.7)承担格式合规、低延迟执行与结构化输出。这种异构模型调度机制,本质上是对软件工程多阶段约束(语义一致性、协议规范性、测试确定性、部署可控性)的技术响应。它支撑真实场景下的端到端闭环:从Jira需求→OpenAPI文档→Spring Boot代码→JUnit测试→Conven

weixin_30924239的博客 418

11年电赛综合测评——单运放三角波发生器

目录 背景知识科普: 原理:局部负反馈+大环负反馈+积分器 仿真图如下: 背景知识科普: 反馈电路是将放大器输出信号(电压或电流)的一部分或全部,回收到放大器输入端与输入信号进行比较(相加或相减),并用比较所得的有效输入信号去控制输出,这就是放大器的反馈过程。 一、反馈放大器反馈极性的经验分析法—符号法 分析步骤1.在输入端上加上一个“+”或“-”的输入信号,按瞬时极性法标出反馈放大器中各个电极(基极b,集电极c,发射极e)电压的瞬时性。 2.判断经放大和反馈后得到的反馈信号Xf的瞬时极性

沉迷单车的追风少年 9905

YOLO11-pose关键点检测:训练实战篇 | 自己数据集从labelme标注到生成yolo格式的关键点数据以及训练教程

教会你如何用自己的数据集转换成对应格式的数据集以及如何训练YOLO11-pose关键点检测

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 5417

Linux V4L2

Linux V4L2 子系统

mapleay的博客 250

22、忆阻器、忆阻系统及其神经形态应用综述

本文综述了忆阻器与忆阻系统的理论基础及其在神经形态系统中的广泛应用。从忆阻器的基本定义出发,介绍了其在非线性电路、存储技术、通信和神经形态计算等领域的应用潜力。重点探讨了基于忆阻器的神经元模型(如Hodgkin-Huxley、FitzHugh-Nagumo和Hindmarsh-Rose模型)、突触实现方式及多种忆阻神经网络架构,包括细胞神经网络、脉冲神经网络和递归神经网络等。此外,深入分析了忆阻器在水库计算中的理论研究与硬件实现进展,展示了其在时间序列处理、模式识别和信号预测等方面的优异性能。尽管忆阻技术前

kiwi8的博客 207

工作中使用到的单词(软件开发)_第五版

本文摘要: 本文为软件开发相关的术语与技术要点整理,主要包含2020-2025年间四版内容更新(No.01-41)。重点包括: 证书文件格式(PEM/P12)差异 外部API通信注意事项(Accept头设置、HTTPS连接问题) Postman工具使用技巧(Cookie管理、请求头设置) WAS配置相关经验(JVM设置、SSL连接问题) 数据库操作命令(DB2表结构修改) IBM安全管理组件(TAM/iv-user机制) 网络通信细节(chunked传输编码特性) 常用开发工具(curl、Postman)的

sun0322 2518

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android apk快速定位、灰色按钮克星--DroidSword

本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80994434在进行Android应用程序的逆向分析时,经常需要对Android应用程序的按钮事件、Activity界面等类的代码进行定位分析,传统的代码定位方法就是进行按钮或者Activity界面等显示的 字符串信息 进行全局的搜索,然后找他们的id或者类进行代码的定位,比较繁琐...

Fly20141201. 的专栏 7008

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android app,android.app

A window feature at the top of the activity that may display the activity title, navigationmodes, and other interactive items.Per-child layout information associated with action bar custom views.A tab...

weixin_29846499的博客 183

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

说一说Qpython3在Android手机上的应用

QPython3是一款可以完美运行于Android平台上的Python3的脚本引擎,QPython3整合了Python3解释器、Console、编辑器和SL4A库。让你在Android设备上也能方便的开发Python项目。 研究Qpython也有一段时间了,一直想记录一些东西以便后面可以回顾,现在终于腾出一些时间整理了过去弄的小程序,其中有些是网上查找的,也有自己研究的,我相信对小伙伴也有帮助。 Qpython3中好多库不能安装,只能靠一点点尝试,andriodhelper不需要安装,下面是一个最简单的py

Crazydoubao的博客 3580

一、qpython 的 androidhelper库 概述

androidhelper.Androidhelper

weixin_45406671的博客 6241

qpython3怎么运行代码_安卓运行Python的神器:QPython

很多热爱编程的学友经常会问这样的问题:如何才能学好Python?我的回答是:你的热情+经常练习。也许你会说我没有时间啊?今天我们介绍的就是一个利用碎片化时间学习Python的利器:QPython。这是一款能够在安卓手机上运行Python的软件,你可以在地铁上、公交车上甚至在无聊的会议上随时随地练习Python。闲话少说,正式开始我们的内容吧!版本介绍QPython是一种通用叫法,其实它分为两款,分...

weixin_39769187的博客 3012

Android MediaPlayer 工具类

Android MediaPlayer 工具类

weixin_47583974的博客 595

intent详解

<br />intent在google的sdk中原文释义是:An intent is an abstract description of an operation to be performed,intent就是对将要进行的东东的一种抽象描述,我感觉intent在开发中起着穿针引线的强大功能,起着信使的作用,学习中几乎 处处都要用到这个东东,今天特地将平时总结的写了出来,顺便自己又复习了一下。<br />1.浏览网页<br /> Uri uri = Uri.parse(“http://www

专注Android 927
上一篇: Android View 链式调用快捷设置 Helper 类
下一篇: 解决 Adapter 多个 Item 存在 EditText 监听输入问题
「已注销」
博客等级 码龄11年 14粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值