不废话直接技巧
12.之前网上哀悼日的时候都会有整个页面变灰的那种页面效果,开发小技巧来了
12.1第一种方法,通过设置硬件加速的这个方法来的第二个参数来快速设置灰色背景:
Paint paint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
mPaint.setColorFilter(new ColorMatrixColorFilter(cm));
getWindow().getDecorView().setLayerType(View.LAYER_TYPE_HARDWARE, paint);
12.2 通过自定义根布局(修改根布局画布的颜色),来改变他的子类们的最外层颜色:
public class GrayFrameLayout extends FrameLayout {
private Paint mPaint = new Paint();
public GrayFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
mPaint.setColorFilter(new ColorMatrixColorFilter(cm));
}
@Override
protected void dispatchDraw(Canvas canvas) {
canvas.saveLayer(null, mPaint, Canvas.ALL_SAVE_FLAG);
super.dispatchDraw(canvas);
canvas.restore();
}
@Override
public void draw(Canvas canvas) {
canvas.saveLayer(null, mPaint, Canvas.ALL_SAVE_FLAG);
super.draw(canvas);
canvas.restore();
}
}
参考博文2:https://blog.csdn.net/fengyeNom1/article/details/105331406
11.有时候想要打断点,可是老是打不上,手机页面开始的速度太快了的问题
在你想要断点的代码的上一个位置写上:Debug.waitForDebugger();
然后Run一下我们的代码,代码跑完之后会在页面停留,这个时候选择As工具上面的Attached Debbug 选择对应的进程,
然后打点,最后程序自动就会跳到你打点的那个地方。
10.有时候手机连不上电脑,或者应用宝之类的,但是又想安装一个app,那么就需要用到CMD的命令来操作了
adb push 和 adb pull,下面直接上截图
9.查看手机的build.prop
----获取手机第三方系统的os的时候,经常要通过build.prop去查找第三方os的版本
如果无法有的机型无法获取到相对应的版本信息的话,那么就要通过cmd命令行的方式去查找
通过 adb shell 打印系统属性的 key
打开系统的命令行工具(开始中输入cmd)
输入 adb shell 进入 adb shell
输入 cd system 进入 system 目录
输入 cat build.prop 查看所有系统属性
例如oppo手机的时候我们就可以找到
我们就可以找到oppo手机的搜索key是:ro.build.version.opporom
结合上面的超链接就可以得到oppo的手机os了
8.实时获取手机上面Activity的包名
----方便我们在要抓取其他app的activity页面的是拿到我们想要的那个包名
dumpsys activity | grep mFocusedActivity
示例代码:
http://pp.myapp.com/ma_icon/0/icon_1029694_1507606268/96
http://cdn00.baidu-img.cn/timg?vsapp&size=b800_800&quality=100&imgtype=3&er&sec=0&di=ec714c106b207d50b0f90bf615852306&ref=http%3A%2F%2Fh.hiphotos.bdimg.com&src=http%3A%2F%2Fh.hiphotos.bdimg.com%2Fwisegame%2Fwh%253D512%252C512%2Fsign%3D271d55de5a3d26972e86005864c99ece%2Fac4bd11373f08202dd5ef92b40fbfbedaa641bd1.jpg
http://cdn00.baidu-img.cn/timg?vsapp&size=b800_800&quality=100&imgtype=3&er&sec=0&di=19394e64302be43b5e7c766e8a0440b4&ref=http%3A%2F%2Fh.hiphotos.bdimg.com&src=http%3A%2F%2Fh.hiphotos.bdimg.com%2Fwisegame%2Fwh%253D512%252C512%2Fsign%3D198e8681c01349547e4be061677cbe6d%2Fd439b6003af33a87ae013e1acd5c10385343b545.jpg
http://cdn00.baidu-img.cn/timg?vsapp&size=b800_800&quality=100&imgtype=3&er&sec=0&di=1bdf798b5d5f7246f38a32e31f592466&ref=http%3A%2F%2Fc.hiphotos.bdimg.com&src=http%3A%2F%2Fc.hiphotos.bdimg.com%2Fwisegame%2Fwh%253D512%252C512%2Fsign%3D15942fd6b299a9013b6053332ca7264e%2Fdcc451da81cb39dbbc599494da160924aa183052.jpg
7.判断是否是小米系统等问题
try {
String manufacturer = android.os.Build.MANUFACTURER;
if (manufacturer.equalsIgnoreCase(“Xiaomi”)) {
if(VERSION.SDK_INT > 20 && VERSION.SDK_INT < 23){
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
6.拍照后发现图片旋转了,的问题解决
网上的很多解决办法都是去读取图片的旋转角度,然后转回来,但是很巧我读到的角度一直都是0度,所有没办法解决,
我们可以换个思路,旋转了的图片的宽和高肯定是宽大于高,这样我们就可以判断是否旋转了,
然后我们调用矩阵就可以把图片旋转回来了
bitmap = BitmapFactory.decodeFile(lockerWrongPwdPicStr);
int width11 = bitmap.getWidth();
int height11 = bitmap.getHeight();
if(width11 > height11){
Matrix matrix = new Matrix();
matrix.postRotate(270);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, width11,height11, matrix, true);
}
int width = bitmap.getWidth();
int height = bitmap.getHeight();
就这样,就可以解决这方面的问题了
5.控制toolbar根据不同的情况来设置是否显示或者隐藏
appBarLayout = (AppBarLayout) findViewById(R.id.app_bar_layout);
mToolbar = (Toolbar) findViewById(com.baidu.screenlock.core.R.id.toolbar);
setSupportActionBar(mToolbar);
//设置头部是否隐藏
AppBarLayout.LayoutParams layoutParams = (AppBarLayout.LayoutParams) appBarLayout.getChildAt(0).getLayoutParams();
if (Build.VERSION.SDK_INT <= 15) {
layoutParams.setScrollFlags(0);
}else {
layoutParams.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
}
mToolbar.setLayoutParams(layoutParams);
4.调用系统的方法来判断获得的app列表是否是系统的app
需求场景:比如现在要获取当前栈中的所有元素的图标,但是又不要显示系统的时候
/**
* 是否系统应用
* @param ctx
* @param pkgName
* @return
*/
public static boolean isSystemApp(Context ctx, String pkgName){
try {
PackageManager manager = ctx.getPackageManager();
PackageInfo packageInfo = manager.getPackageInfo(pkgName, PackageManager.GET_CONFIGURATIONS);
if((packageInfo.applicationInfo.flags & android.content.pm.ApplicationInfo.FLAG_SYSTEM)!=0){
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
3.app中的权限页面跳转的时候一般会在权限页面上盖一个半透明的提示Activity,但是有的机型:比如小米5,背景会全部变黑
搞了好久找到解决办法,就是加延迟,就可以顺利解决这种变黑的问题
Intent guideIntent = new Intent(mContext, LockTipOperationActivity.class);
guideIntent.putExtra(LockTipOperationActivity.EXTRAS_KEY_NAME, setProcessType.getGuideId());
AdaptationPackageUtil.startGuideActivity(mContext, guideIntent);
2.隐式打开Activity的更加简便的方法
try{
Intent intent = new Intent();
intent.setClassName(getContext(),"com.baidu.screenlock.settings.OneKeySetActivity");
getContext().startActivity(intent);
}catch (Exception e){
e.printStackTrace();
}
百度上面的都是要添加filter什么的,这个方式更加简便、方便,最好在外面加一个try{} catch(){}防止类路径错误等问题导致的错误
1.Android属性之excludeFromRecents
android:excludeFromRecents控制在不在recent列表中显示。
true时不显示;false显示,默认。
运行如下activity后,不会显示在recent列表中。
<activity
android:name="com.example.com.test.wgh.MainActivity"
android:label="@string/app_name"
android:excludeFromRecents="true">