一些工具集合。
- 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();
}
}
-
注意区分
KHelperActivity
与KActivityHelper
的区别 -
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()来设置值。
- 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)
- 自定义日志弹窗
DebugView.addAction("测试", new DebugViewListener() {
@Override
public void onClick(Activity activity, View view, DebugEntity entity) {
new AHTest().startActivity(activity);
}
});
- 通过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)
}
- 运行sample模块可启动demo