
android
文章平均质量分 59
水泽_木兰
让代码插上翅膀去翱翔。
展开
-
透明状态栏
一、闪屏页闪屏页就是app点击后打开的第一个activity,要求立即显示出页面图片;app打开页面默认会出现白板或黑板,这是因为没有设置android:windowBackground 窗口背景就是第一眼看到的颜色(白色或黑色);紧接着才会加载布局并展示出来。所以闪屏页一般没有layout布局文件,直接用style样式来完成:<!--闪屏页面布局--> <style name="SplashTheme" parent="Theme.AppCompat.NoAc原创 2021-03-03 14:33:51 · 519 阅读 · 1 评论 -
Android上传下载文件进度监听,大文件(500M以内)上传
1.普通文件的上传下载采用的是retrofit+rxjava的形式;1.1 依赖 implementation 'com.squareup.retrofit2:retrofit:2.4.0' implementation 'com.squareup.retrofit2:adapter-rxjava:2.4.0' implementation 'com.squareup.retrofit2:converter-gson:2.4.0' implementation 'i.原创 2020-09-23 15:03:00 · 1612 阅读 · 0 评论 -
Android自定义相机,带定位功能
1.公司项目要求,拍照时要显示自己的位置;排出的照片也要在照片上能看到位置;大致两种思路:自定义拍照页面后,点击拍照的时候,不拍照而是截屏;第二种是拍照后,把文字等等ui要求的东西通过bitmap代码以水印的方式加上去。截屏的话ui可以随意布局,都能得到想要的照片;但Android方面截屏参差不齐,有的还要root;我还没有细看,所以暂时用第二种方式实现。2.先看大概的样子这是打开相机和拍完照的样子。3.我这里使用的是camera1;对camera2来说,各个手机厂家支持情况..原创 2020-09-23 11:51:07 · 2154 阅读 · 2 评论 -
Android9上,调用系统相机拍照后,相册中不显示,第三方软件也读取不到
一、问题:我的app调用系统拍照功能,然后使用知乎的Matisse框架加载自己定义的文件夹中的图片,发现怎么也不显示。二、原因:Android给图片创建了一个数据库,我们需要手动去刷新这个数据库,把刚刚拍摄的照片信息放到数据库中,其它的软件才可以获取到图片。否则只有自己找到那个路径去拿图片了。三、先看实现:package com.ysl.photo;import android....原创 2019-11-22 12:39:41 · 3168 阅读 · 0 评论 -
Android productFlavors多环境配置
一般开发过程都会有开发环境和线上环境,而他们的服务器地址是不同的;每次打包都要去改里面的url地址很麻烦。下面说一下我自己的配置方法:defaultConfig {// applicationId rootProject.ext.android.applicationId //ysl 通过下面的多环境来配置,这里不需要写包名了 minSdkVersion r...原创 2019-11-13 10:50:44 · 1526 阅读 · 0 评论 -
Android底部导航BottomNavigationView
1.BottomNavigationVIew,它是AndroidSupport Library 25.0.0 版本中,新增加了一个API,底部导航视图。支持库:implementation 'com.android.support:design:28.0.0'2.看布局文件:<android.support.design.widget.BottomNavigationView...原创 2018-11-29 21:05:49 · 975 阅读 · 0 评论 -
AndroidStudio 3.2.1中Butter knife的用法
1. 工程的build.gradle中:dependencies { classpath 'com.android.tools.build:gradle:3.2.1' classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0-rc1' // NOTE: Do not place yo...原创 2018-11-16 16:25:59 · 937 阅读 · 0 评论 -
Activity启动模式
1.四种启动模式:“standard” (默认)“singleTop”“singleTask”“singleInstance”注意:如果不设置启动模式,默认是“standard”,如果不指定affinity标记,默认是包名。2.“standard” (默认)Activity默认模式,所有的Activity遵循元素进栈出栈的特性,例如进栈序列为A->...原创 2018-11-21 15:58:50 · 412 阅读 · 0 评论 -
Android之AIDL实现两个app的调用以及双进程app的进程通信
1.AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言。是 Android 提供的一种进程间通信 (IPC) 机制。我们可以利用它定义客户端与服务使用进程间通信 (IPC) 进行相互通信时都认可的编程接口。在 Android 上,一个进程通常无法访问另一个进程的内存。 尽管如此,进程需要将其对象分解成操作系统...原创 2018-11-23 19:24:44 · 1182 阅读 · 0 评论 -
intentService和foregroundService的使用
1.intentserviceIntentService具有以下特点:(1) IntentService自带一个工作线程,当我们的Service需要做一些可能会阻塞主线程的工作的时候可以考虑使用IntentService。(2) 我们需要将要做的实际工作放入到IntentService的onHandleIntent回到方法中,当我们通过startService(intent)启动了Int...原创 2018-11-22 19:50:31 · 1621 阅读 · 0 评论 -
Sophix热修复的简单使用
所有的步骤都是通过阿里云的接口文档来写的,其实很简单。按照步骤一步一步进行就可以了。1.我的项目的gradle写法:// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript { repositories ...原创 2018-11-17 12:54:02 · 735 阅读 · 0 评论 -
TextureView+MediaPlayer的一个简单播放器
1.布局文件:<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android....原创 2018-11-16 16:17:56 · 1562 阅读 · 0 评论 -
Activity与Service的数据通信
1.Service基础(1)service的生命周期(2)start---->stop调用:(3)bind--->unbind调用:bindService(intent, serviceConnection, BIND_AUTO_CREATE);flag: @param flags Operation options for the bindin...原创 2018-11-20 21:02:19 · 702 阅读 · 0 评论 -
Android-Logger写成文件并存储起来
1. 添加依赖:implementation 'de.mindpipe.android:android-logging-log4j:1.0.3'implementation 'log4j:log4j:1.2.17'2.初始化:public String getLogDirectory() { return Environment.getExternalStorag...原创 2018-11-15 17:13:50 · 1962 阅读 · 0 评论 -
对于运行时权限的探究
1.运行时权限是6.0出现的。下面都是以录音权限为例。2.通用的权限判断方法: int permission = ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO); if (permission != PackageManager.PER原创 2017-07-08 08:22:25 · 322 阅读 · 0 评论 -
判断屏幕有没有设置解锁密码
1.网上查到几种写法,有反射,经验证不靠谱,4.4的手机可以,6.0的手机就不行了。2.通过电源锁,不过要api16及以上使用。private boolean isLockSecure(Context context) { KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService原创 2017-07-08 08:05:15 · 688 阅读 · 0 评论 -
android的popuwindow的使用
private void showPopupWindow() { View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.popuplayout, null); PopupWindow mPopWindow = new PopupWindow(contentView);原创 2016-10-03 17:25:47 · 695 阅读 · 0 评论 -
实现未读信息右上角的圆圈数组提示功能
1.自定义一个view集成自text view;/* * BadgeView.java * BadgeView * * Copyright (c) 2012 Stefan Jauker. * https://github.com/kodex83/BadgeView * * Licensed under the Apache License, Version 2.0 (the原创 2017-07-02 08:46:45 · 1216 阅读 · 0 评论 -
ListView 条目中含有checbox,imgbtn,button;如何处理选择时,上下滑动会乱掉
1.先上代码package com.bjym.myapplication;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.Vi原创 2017-07-11 08:39:31 · 328 阅读 · 0 评论 -
数据存储路径
1.通过上下文对象来获取目录 context.getFilesDir():/data/data/包名/files context.getCacheDir():/data/data/包名/cache 清空缓存会删除该目录下的文件 File context.openFileOutput:返回了一个指向/data/data/包名/files目录的输出流 context.openFileInpu原创 2017-06-03 18:36:12 · 491 阅读 · 0 评论 -
Activity
1.Activity任务栈:(就像弹夹,只能从一端进出)栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。注:...原创 2018-11-17 15:54:29 · 185 阅读 · 0 评论 -
Activity之间的数据传输
1.通信方式:2.通过intent传递://传数据Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.putExtra("name", "ysl"); intent.putExtra("age", 22); ...原创 2018-11-17 16:43:43 · 372 阅读 · 0 评论 -
Android打包aar,并在另一个app使用
1.如何打包aar文件1.1先把自己的模块变成libraryapply plugin: 'com.android.library'注意清单文件中的修改;假如使用了butterknife注解;需要把R改为R2;1.2在Androidstudio右侧的gradle就会生成aar文件:2.在新工程中引用2.1放在新工程的lib目录下然后在app的build...原创 2019-04-22 09:38:22 · 2225 阅读 · 1 评论 -
使用Hook技术屏蔽控件的点击事件
1.其实里面用的就是反射技术;先来看一个简单例子:public class HookActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstance...原创 2019-03-30 16:38:55 · 848 阅读 · 0 评论 -
内存泄漏检测工具LeakCanary的简单使用
1.引入dependencies { debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.3' releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.3' // Optional,...原创 2019-03-18 17:36:12 · 788 阅读 · 0 评论 -
高性能的MMKV
1.MMKV简介腾讯微信团队于2018年9月底宣布开源 MMKV ,这是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,主打高性能和稳定性。近期也已移植到 Android 平台,一并对外开源。MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从 201...原创 2019-03-21 16:35:38 · 1555 阅读 · 0 评论 -
一个简单的mvvm架构例子
1.MVVM通过双向绑定的机制,实现数据和UI内容,只要想改其中一方,另一方都能够及时更新的一种设计理念,这样只需要改变数据就行。先看下MVVM设计图:一般情况下就这两种情况,这看起来跟MVP好像没啥差别,其实区别还是挺大的,在MVP中View和presenter要相互持有,方便调用对方,而在MVP中 View和ViewModel通过Binding进行关联,他们之前的关联处理通...原创 2019-03-21 09:41:29 · 3573 阅读 · 0 评论 -
Android之IntentService
1.简单使用tv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(HandleActivity.this, MyIntentService.c...原创 2019-03-12 14:36:57 · 158 阅读 · 0 评论 -
Android之HandlerThread
1.HandlerThread是一个Thread,是Google为提高开发者效率封装的一个类。与普通的Thread不同的是,它有一个成员属性 Looper,也就是说,我们的HandlerThread具有了Looper的功能。public class HandlerThread extends Thread {@Override public void run() { ...原创 2019-03-12 12:43:03 · 151 阅读 · 0 评论 -
Android之AsynTask
1.asynctask是Android为我们封装的一个异步线程调用的类;首先我们看一下它的简单使用public class HandleActivity extends AppCompatActivity { public static final int MSG_CODE = 0; public static final int MSG_CODE2 = 1; ...原创 2019-03-12 10:58:34 · 347 阅读 · 0 评论 -
Android之ViewStub的简单使用
1.viewstub就是动态加载试图;也就是在我们的app启动绘制页面的时候,他不会绘制到view树中;当在代码中执行inflate操作后,她才会被添加到试图中。其实ViewStub就是一个宽高都为0的一个View,它默认是不可见的,只有通过调用setVisibility函数或者Inflate函数才 会将其要装载的目标布局给加载出来,从而达到延迟加载的效果,这个要被加载的布局通过android:l...原创 2019-03-19 19:17:01 · 17412 阅读 · 0 评论 -
Android的handler
1.Google官方建议开发人员使用Handler实现异步刷新UI,我们在平常的工作中也很好地采纳了这个提议:首先在主线程中建立Handler,然后在子线程中利用handler.sendMessage(message)发送消息至主线程,最终消息在handleMessage(Message msg) {}得到相应的处理。package com.ysl.myandroidbase.activit...原创 2018-12-03 15:35:33 · 180 阅读 · 0 评论 -
Android之webview
参考:https://blog.youkuaiyun.com/qq_36252044/article/details/77993297https://blog.youkuaiyun.com/lowprofile_coding/article/details/77928614https://blog.youkuaiyun.com/carson_ho/article/details/64904691/ 个人认为写的最好的一个...原创 2018-11-28 17:11:35 · 263 阅读 · 0 评论 -
Android运行时权限
1.在Android6.0之前只需在AndroidManifest.xml文件写明权限即可。但是在Android6.0之后也就是SDK>=23的时候,一些隐私权限需要动态申请,而且在用户同意授权之后App才能拥有该权限。如下9组权限需要动态申请。而且一组权限只要一个授权授权同意,全组都可用。 group:android.permission-group.CONTACTS p...原创 2018-12-01 16:05:26 · 872 阅读 · 0 评论 -
Android之BroadcastReceiver
1.BroadcastReceiver属于Android的四大组件之一。分为:无序广播和有序广播无序广播是一种完全异步执行的广播,在广播发出之后,所有的广播接收器会在同一时间接收到这条广播,广播无法被截断。有序广播是一种同步执行的广播,在广播发出之后,优先级高的广播接收器可以优先接收到这条广播,并可以在优先级较低的广播接收器之前截断停止发送这条广播。2.注册方式:静态注册:只需...原创 2018-11-27 11:51:38 · 166 阅读 · 0 评论 -
Android数据传输之Parcelable
1.Parcelable,定义了将数据写入Parcel,和从Parcel中读出的接口。一个实体(用类来表示),如果需要封装到消息中去,就必须实现这一接口,实现了这一接口,该实体就成为“可打包的”了。接口的源码如下:public interface Parcelable { //内容描述接口,基本不用管 public int describeContents(); ...原创 2018-11-23 11:49:31 · 630 阅读 · 0 评论 -
Activity与Fragment数据传输
1.fragment生命周期(1) 当一个fragment被创建的时候,它会经历以下状态.onAttach() onCreate() onCreateView() onActivityCreated()(2) 当这个fragment对用户可见的时候,它会经历以下状态。onStart() onResume()(3)当这个fragment进入“后台模式”的时候,它会经历以下...原创 2018-11-17 18:13:04 · 5649 阅读 · 1 评论 -
通讯录按字母排序的工具类
package ptt.terminalsdk.tools;import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat原创 2016-10-02 17:03:47 · 581 阅读 · 0 评论 -
打印log的一个简单工具类
package ptt.terminalsdk.tools;import android.util.Log;public class LogUtil { public static final int VERBOSE = 1; public static final int DEBUG = 2; public static final int INFO = 3; pub原创 2016-10-02 16:57:31 · 293 阅读 · 0 评论 -
edittext的相关设置及软键盘的设置
当我们的程序的第一页里面有edittext时,当刚进入页面时,系统默认这个edittext是获取焦点的,所以就会出现输入法的键盘,这种情况很让人烦,因为这时你并没有要去输入框中搜索的意思。我们可以通过几种不同的方式进行输入法键盘的隐藏;来实现当我们点击搜索框时才会获取到焦点并弹出输入法框。1,在清单文件中进行设置,最简单;android:windowSoftIn原创 2016-05-03 07:35:22 · 891 阅读 · 0 评论