Giter Club home page Giter Club logo

kutils's Introduction

KUtils

一些工具集合。

  • Activity代理。继承KActivityHelper,只需要在manifest中注册一次KHelperActivity就行,免去多人协作同时修改manifest导致git冲突的情况。
  • 输出带代码位置的日志,并且在手机上可查看日志,且仅在debug状态打印,打包release好不会打印。
  • 在手机端查看mipmap/drawable/color资源
  • 在手机上查看当前app目录结构
  • 授权申请。简化请求各种权限。
  • 各种功能、三方库的使用demo
  • 小米、华为、OPPO、vivo 4大厂商的推送集成

初始配置

  • gradle配置
// 仓库配置
maven { url "https://jitpack.io" }

// 依赖配置
implementation 'com.github.WangKiven:KUtils:1.4.x'
  • 配置Application
// 如果不需要在Application中做什么操作,直接在manifest配置KContext就行了(不建议,KUtil.Config中的参数最好手动配置一下),否则使用下面两种方法中的一种
// 1 继承KContext,onCreate()不能被重写,只能使用initOnlyMainProcess()和init(),下面是kotlin代码
class AppContext : KContext() {
    override fun initOnlyMainProcess() {
        super.initOnlyMainProcess()
        
        KUtil.init(this, KUtil.Config().apply {
            isDebug = true/false;
            setTag("xxx")
            setImageDirName("xxx")
        })
    }

    override fun init() {
        super.init()
    }
}
// 2 仿照KContext重新写一个Application
public class KContext extends Application {
    @Override
    public final void onCreate() {
        super.onCreate();
        KUtil.setApp(this);

        // 必须先调用KUtil.setApp(this);否则 KAppHelper.getInstance()=null
        KAppHelper.getInstance().startAppCreate();

        // TODO: 2021-04-06 ------------------要加的代码在下面-------------------
        
        KUtil.Config config = new KUtil.Config();
        config.setConfigSharedPreferences("xxx");
        config.setDebug(true/false);
        config.setImageDirName("xxx");
        KUtil.init(this, config);
        
        // TODO: 2021-04-06 ------------------要加的代码在上面-------------------

        KAppHelper.getInstance().endAppCreate();
    }
}

KActivityHelper 使用方法

  • 注意区分KHelperActivityKActivityHelper的区别

  • anifest注册KHelperActivity

<activity android:name="com.kiven.kutils.activityHelper.KHelperActivity" />
  • 使用KActivityHelper
// 实现
public class AHShare extends KActivityHelper {
    @Override
    public void onCreate(KHelperActivity activity, Bundle savedInstanceState) {
        super.onCreate(activity, savedInstanceState);
        setContentView(R.layout.activity_h_test_base);
    }
}
// 调用
AHShare().startActivity(mActivity)
AHShare().startActivityForResult(mActivity, 8899)

: KActivityHelper 是 Activity 的代理,通过mActivity持有Activity。通过代码可以看出,KActivityHelper在Activity之前创建, KActivityHelper.startActivity时会请KActivityHelper存入静态map,存入时拿取到key,将key存入intent后其他Activity。Activity启动后在onCreate中,通过key从静态map拿取到KActivityHelper,开始将Activity的生命周期与KActivityHelper绑定,在onDestroy()释放KActivityHelper与Activity的相互持有。

内存回收: 这种情况,KActivityHelper是不能拿取到了,所以只有重新创建KActivityHelper,可查看KHelperActivity类里面的方法getHelper(Bundle savedInstanceState)理解原理,其实就是通过反射实现的,内存回收的时候会在onSaveInstanceState()保存类名。所以,建议不要直接给KActivityHelper设置参数值,还是通过KActivityHelper.getIntent()来设置值。

功能菜单呼出方法

  • 运行App,摇动手机或者点击右侧中间位置的呼吸按钮,出现功能弹窗
  • 可以在功能菜单编辑界面,设置功能菜单呼出方式。点击可打开编辑界面,设置快捷功能,和呼出方式。
  • avataravatar

查看打印的日志

  • Activity继承KActivity, 不用对KActivityHelper进行处理
public class ConfigureWidget extends KActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_h_test_base);
    }
}
  • 输出日志需要使用指定的方法来输出
KLog.i("Hello KLog.");
KLog.d("Hello KLog.");
KLog.e("Hello KLog.");
KLog.w("Hello KLog.");

// KLog升级功能

// 1 输出位置需要忽略的类
KLog.updateOtherStack(listOf("com.kiven.sample.util.UtilsKt"))
// 2 获取输出位置时,跳过指定次数的有用位置
KLog.i("Hello KLog.", 1)
  • 运行App,摇动手机或者点击右侧中间位置的呼吸按钮,出现功能弹窗,选择Log图标进入日志查看界面

avatar avatar

  • 自定义日志弹窗
DebugView.addAction("测试", new DebugViewListener() {
    @Override
    public void onClick(Activity activity, View view, DebugEntity entity) {
        new AHTest().startActivity(activity);
    }
});

在手机端查看mipmap/drawable/color资源

  • 打开日志界面,点击查看资源
  • 在功能菜单点击按钮

avatar avatar

app目录结构

  • 打开日志界面,按右上角的按钮选择文件目录
  • 在功能菜单点击按钮

avatar avatar avatar

打开系统设置里面对应该应用的应用详情

在功能菜单点击按钮

授权申请

  • 通过fragment请求权限,建议使用这个。
// 这句代码建议,在继承的Application中使用,因为是静态变量,只需要设置一次。
KGranting.useFragmentRequest = true;

// 使用。这里是Kotlin代码
KGranting.requestPermissions(activity, 377, Manifest.permission.RECORD_AUDIO,
    "录音") {
        if (it) {
            AHXunfeiTest().startActivity(mActivity)
    }
}
  • 不通过fragment请求权限,不建议使用,以后可能会删除这个权限请求方式。
// 这句代码建议,在继承的Application中使用,因为是静态变量,只需要设置一次。
// 默认值是true,不建议设置为false
KGranting.useFragmentRequest = false;

// 使用。这里是Kotlin代码
KGranting.requestPermissions(activity, 377, Manifest.permission.RECORD_AUDIO,
    "录音") {
        if (it) {
            AHXunfeiTest().startActivity(mActivity)
    }
}
// 请求结果交由KGranting处理。这里是Kotlin代码。在Activity或者KActivityHelper的onRequestPermissionsResult里面调用KGranting.onRequestPermissionsResult,注意不要出现请求一次权限多次回调的情况
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    KGranting.onRequestPermissionsResult(requestCode, permissions, grantResults)
}

各种功能、三方库的使用demo

  • 运行sample模块可启动demo

kutils's People

Contributors

wangkiven avatar whiskylove avatar xiaoanzi avatar zhangyujiu avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.