安卓一些方法总结

以下为一些安卓中常见的注意点,不定时更新

1.注意申明

android:sharedUserId="android.uid.system"

2.去除Manifest中的申明,apk会隐藏安装图标


    
    

3.在Activity外驱动startActivity,需要给intent加上FLAG_ACTIVITY_NEW_TASK的flag,此常见于AndroidJunit测试中打开activity,否则会报如下错误Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag.

4.判断是否有相应权限

context.checkCallingOrSelfPermission("android.permission.READ_PHONE_STATE") == PackageManager.PERMISSION_GRANTED

5.raw下文件的uri

"android.resource://" + APP的context.getPackageName() + "/" + R.raw.文件

6.隐藏导航键等控件的情况下,需要获取屏幕分辨率,使用以下方法:

WindowManager wm = (WindowManager) (borderImageActivity.this.getSystemService(Context.WINDOW_SERVICE));
Point point = new Point();
wm.getDefaultDisplay().getRealSize(point);
int width = point.x;
int height = point.y;

以下两种方法无法获取隐藏之后最大屏幕的分辨率:

一:

DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metrics.widthPixels;
int height = metrics.heightPixels;

二:

Resources resources = this.getResources();
DisplayMetrics dm = resources.getDisplayMetrics();
int width = dm.widthPixels;
int height = dm.heightPixels; 

7.设置activity横屏显示,加上

android:screenOrientation="landscape"

8.监听横屏竖屏切换,manifest中加上(一次性加上所有,免得一条一条加)

android:configChanges="orientation|keyboard|layoutDirection|screenSize"

然后Activity中重写onConfigurationChanged方法,示例如下:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
        Toast.makeText(getApplicationContext(), "横屏", Toast.LENGTH_SHORT).show();
    }else{
        Toast.makeText(getApplicationContext(), "竖屏", Toast.LENGTH_SHORT).show();  
    }
}

9.使用instrumentation的时候,如果需要使用uiautomator,在初始化UiDevice的时候,需要使用adb 的命令为adb shell am instrument -w ,要加上-w才能成功初始化UiDevice对象,否则会报空指针异常错误

10.uiautomator中,如果同时使用python-uiautomator和安卓-uiautomator,使用安卓前,要关闭手机ATX的uiautomator服务,否则用安卓uiautomator测试,会出现以下的错误

UiAutomationService android.accessibilityservice.IAccessibilityServiceClient$Stub$Proxy@8c48bd6already registered!

11.控件与边缘距离,

注意
android:layout_alignParentStart与android:layout_marginStart区别

12.代码将mm换算为像素

 

像素= TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM,(float)毫米,getResources().getDisplayMetrics());

13.自定义dialog去除蒙层(后部阴影)

自定义dialog.getWindow().setDimAmount(0f);

14.Bitmap设置背景透明(注意设置为ARGB_8888,不要用565,图片PNG带alpha通道)

bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);//设置位图的宽高
bitmap.setHasAlpha(true);

15Bitmap设置背景为图片

 Drawable drawable=getResources().getDrawable(R.drawable.linecross);
Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565; bitmap = Bitmap.createBitmap(width,height,config);
canvas = new Canvas(bitmap);
bitmap.setHasAlpha(true);
drawable.setBounds(0, 0, width, height);
drawable.draw(canvas);

16.编译后修改APK名称

build.gradle中配置

android.applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "名称.apk"
    }
}

17.TextView设置可滑动

 TextView.setMovementMethod(ScrollingMovementMethod.getInstance());

18.安卓28中非https访问

28限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。

所以GET请求会得到 

not permitted by network security policy
解决办法:

res-xml中加入如network_security.xml


   
         
   

然后在manifest的application中,加入

android:networkSecurityConfig="@xml/network_security.xml"

19.安卓两种hidl访问hal的方式

 1.manifest中配置

false:代表系统无此包也可以执行APK,true则相反

通过访问系统自带的jar包,然后反射jar包所在类,通过jar包访问hal

2 .工程中导入.hal编译出的jar包,直接使用jar包访问hal

你可能感兴趣的:(安卓)