AndroidManifest之内容相关属性

来源:互联网 发布:禁毒网络知识竞赛 编辑:程序博客网 时间:2024/05/22 02:24

application的相关属性

android:allowbackup

是否将程序加入到系统的备份和恢复架构中。

设置为true:可通过adb调试工具 直接backup和resore你的手机应用的数据。
危害漏洞:可直接备份他人手机的应用程序所有数据。

1)手工检测

测试环境:

Windows 7,ADB 调试工具
物理接触目标手机1,连接手机1到 PC 端
手机1和手机2均未被 ROOT,开启 USB 调试
不用安装其它应用,不启动被测试的应用
测试流程:

连接安装开启USB调试手机1 到PC端
在PC自动(也可以提前)安装好手机驱动后
启动命令行界面输入以下命令:

adb devices#显示已连接的设备列表,测试手机是否正常连接adb backup -nosystem -noshared -apk -f com.sina.weibo.ab com.sina.weibo#-nosystem表示不备份系统应用 -noshared表示不备份应用存储在SD中的数据 -apk表示备份应用APK安装包 -f 表示备份的.ab文件路径和文件名 最后是要备份应用的packageName

点击手机2确认恢复界面的“恢复我的数据”
等待恢复完成
打开手机2中新安装的微博客户端,测试可正常登录手机1中帐号执行各种操作,且长期有效。

2)在线检测

目前国内三个主要的Android应用漏洞在线检测系统均能较好的检测此漏洞,建议普通用户和开发者使用腾讯金刚审计系统上传应用安装包进行检测。

腾讯金刚审计系统检测结果( http://service.security.tencent.com/kingkong )

阿里聚安全检测结果( http://jaq.alibaba.com/ )

360捉虫猎手检测结果( http://appscan.360.cn/ )

相关链接详细文章:
https://www.secpulse.com/archives/5228.html

android:supportsRtl

声明你的application是否愿意支持从右到左(原来RTL就是right-to-left 的缩写…)的布局。

如果设置为true,targetSdkVersion设置为17或更高,各种RTL的API将被激活,系统使用您的应用程序可以显示RTL布局。如果targetSdkVersion设置为16或更低的设置为false,RTL的API将被忽略或没有影响您的应用程序将具有相同的行为无论对用户现场的选择相关的布局方向(你的布局会从左至右)。
此属性的默认值是false。

此属性被添加到API 17。

相关链接详细文章:
http://blog.csdn.net/aa464971/article/details/51372204

Activity中的属性

android:screenOrientation属性

有时候需要限制横竖屏切换。只需要在AndroidManifest.xml文件中加入android:screenOrientation属性限制。

android:screenOrientation="landscape"是限制此页面横屏显示,  android:screenOrientation="portrait"是限制此页面数竖屏显示。

1、android:screenOrientation设定该活动的方向, 该值可以是任何一个下面的字符串:

“unspecified”
- 默认值. 由系统选择显示方向. 在不同的设备可能会有所不同.

“landscape”
- 橫向

“portrait”
- 纵向

“user”
- 用戶当前的首选方向

“behind”
- 与在活动堆栈下的活动相同方向

“sensor”
- 根据物理方向传感器确定方向. 取决于用戶手持的方向, 当用戶转动设备, 它跟隨改变.

“nosensor”
- 不经物理方向传感器確定方向. 该传感器被忽略, 所以当用戶转动设备, 显示不會跟隨改变. 除了这个区别,系統选择使用相同的政策取向对于“未指定”设置. 系統根据“未指定”(“unspecified”)设定选择相同显示方向.

2、设置屏幕方向
通过setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);可以指定屏幕方向。

示例代码:

requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置成全屏模式
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE););//强制为横屏setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏

3、动态更改屏幕方向

   //如果是竖排,则改为横排      if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)      {       setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);      }  
//如果是横排,则改为竖排      else if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)      {       setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);      } 

4、固定屏幕显示方向

在AndroidManifest.xml文件里设置默认方向

    <activity android:name=".ChangeOrientation"                        android:label="@string/app_name"                    android:screenOrientation="portrait">

加入这一行android:screenOrientation=”portrait”,(landscape是横向,portrait是纵向):

5、android中每次屏幕的切换动会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次Create的时候载入配置,重新加载,并更新屏幕的布局。

在程序中控制,一般在Activity中的onCreate、onDestroy方法中控制,在onDestroy中保存数据能否成功还真没有试过。人常用的数据保存方式是在onSaveInstanceState完成,然后再onCreate中通过bundle获取~
Java代码:

public void onCreate(Bundle savedInstanceState) {       //强制横屏       setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);       // TODO 更新屏幕布局   }   public void onDestroy() {       if(getRequestedOrientation() ==               ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){           // 保存数据       }else if(getRequestedOrientation() ==               ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){           // 保存数据       }   }  

也可以通过配置属性:android:configChanges="orientation|keyboardHidden|navigation"

防止旋屏后重新执行onCreate。

只需要在Activity 的配置文件里添加属性: android:configChanges="orientation|keyboardHidden|navigation"
可以在activity中重载onConfigurationChanged方法,根据不同旋转方向做其他动作,如下:

     @Override        public void onConfigurationChanged(Configuration newConfig) {            super.onConfigurationChanged(newConfig);           //更新屏幕布局,而不执行onCreate()方法                    }

6、获取屏幕的分辨率(因为android中处理显示的时候,需要根据屏幕分辨率的不同才去不同的布局或显示不同的素材)
Java代码

// 通过WindowManager获取   DisplayMetrics dm = new DisplayMetrics();   getWindowManager().getDefaultDisplay().getMetrics(dm);   System.out.println("heigth : " + dm.heightPixels);   System.out.println("width : " + dm.widthPixels);   // 通过Resources获取           DisplayMetrics dm2 = getResources().getDisplayMetrics();   System.out.println("heigth2 : " + dm2.heightPixels);   System.out.println("width2 : " + dm2.widthPixels);     // 获取屏幕的默认分辨率   Display display = getWindowManager().getDefaultDisplay();   System.out.println("width-display :" + display.getWidth());   System.out.println("heigth-display :" + display.getHeight());  

DisplayMetrics取得的是手机默认情况下,及没有旋转的情况下的分辨率,亦即,该值不会根据屏幕的方向变化而变化。Display取得的是手机的当前分辨率,及根据当前屏幕的方向来取得宽和高,是实时的。

0 0