Android 开发(实用技巧,持续更新)

不废话直接技巧

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();
    } 
}

参考博文:https://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650830296&idx=1&sn=a9f44ac6cd9ec53149e59a380403d04d&chksm=80b7a146b7c02850a96c5300e967f01fb4d58c1c9d320889fae043fd7b12cf42fde741722d52&scene=126&sessionid=1586088807&key=d8f7014a0480479388044a24ea66c7eddad0652250cd0ed1c25b01ad0e08f5171352f18457a060475e0d84e674982e1ced5c57763dac1ff52b817a5a0fdb5d22773d2b68a63568d73aa7246cc9c7b3ee&ascene=1&uin=MTc2MzYzMzc2MQ%3D%3D&devicetype=Windows+10&version=62080079&lang=zh_CN&exportkey=AUTJTMThNssgS87OFX3kMdA%3D&pass_ticket=TfZROikPmeKFmDh1qldS7qmv3lYejVybp0z9n3SjnamhHS5LCrgXaA617EMrRnK4

参考博文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的版本

推荐博客:获取小米、华为、oppo等机型的Rom、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">

 

 

 

 

 


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值