Android学习笔记_61_手机安全卫士知识点归纳(1)状态/形状图形 GPS 设备管理器DeviceAdminReceiver ImageView属性
1.在做程序自动安装更新的时候 ,必须保证程序的签名和包名是相同. C:\Documents and Settings\zehua\.android \ debug.keystore debug的签名,开发时候的签名 Re-installation failed due to different application signatures. Please execute 'adb uninstall cn.itcast.mobilesafe' in a shell.
2.两种上下文区别:
applicationcontext 生命周期 进程存在 上下文就存在
activity.this activity 在任务栈 上下文存在
例如:在打开数据库传入上下文时间,要用应用程序上下文,因为如果你用activity上下文,如果回收了 就不存在,就出错了,所以弹出框只能和acitvity上下文,如果是全局的要用全局上下文。
3.android:gravity与android:layout_gravity
LinearLayout有两个非常相似的属性:android:gravity与android:layout_gravity。 他们的区别在于:android:gravity用于设置View组件的对齐方式, 而android:layout_gravity用于设置Container组件的对齐方式。
举个例子,我们可以通过设置android:gravity="center" 来让EditText中的文字在EditText组件中居中显示; 同时我们设置EditText的android:layout_gravity="right" 来让EditText组件在LinearLayout中居中显示。
4、需要指定 FLAG_ACTIVITY_NEW_TASK 属性:
如果你在广播接收者和服务里面去开启一个activity的时间 ,因为广播接收者和服务没有任务栈,所以要显式的指定。
5、终止广播方法:
不能通过abortBroad因为通话调用发送广播的方法是带有接收者API,这个方法 不能被abortBroad结束,要用setResult(null) 结束。
6、自定义窗口:
开始自定义弹出窗,其实就是继承,然后重写这个样式 。
//这将是最简单的一种方法,至此把XML转换成View对象已有三种方法
View view = View.inflate(this, R.layout.first_entry_dialog, null);
实现: LayoutInflater factory = LayoutInflater.from(context);
return factory.inflate(resource, root);
7、状态图形和形状图形的使用:
<!-- 第一:处理按钮在不同状态下颜色不同
第二:处理GridView在点击和不点击下颜色不同。
第三:优化显示padding与margin的区别。
button_selector.xml这个就是State List的配置。 -->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/button_background" android:state_enabled="true" android:state_window_focused="false"/>
<item android:drawable="@drawable/button_background_selected" android:state_pressed="true"/>
<item android:drawable="@drawable/button_background" android:state_focused="true"/>
<item android:drawable="@drawable/button_background"/>
</selector>
<!--其实就是对一个按钮在不同状态下给设置不同的图片。 那么这些背景图片的配置是这样的。 -->
button_background.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<corners android:radius="2dip" >
</corners>
<gradient android:startColor="#ff2c2d2d"
android:centerColor="#ff262626"
android:endColor="#ff515151"
/>
</shape>
<!--
按钮其它背景都是这样,只是颜色不一样。
然后在用按钮的时间这样调用:
android:background="@drawable/button_selector"
调用的是一个列表,也就是把这个列表作为一个背景列表传到它 ,
然后不同的状态下,显示不同的背景图片。很简单。
也就是说,以前我们可能只用一张图片作为背景 ,但是现在我们用
很多张图片形成一个列表作为它的背景,然后在不同的状态下调用不同的。
例如我们以前可以直接把button_background作为背景了,
android:background="@drawable/button_background"
但是现在我们用列表。 如何 让GridView,ListView这些东西也变色呢?
item_background_selector.xml -->
<?xml version="1.0" encoding="utf-8"?>
<!-- 用于配置GridView背景图片列表 -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/item_background" android:state_enabled="true" android:state_window_focused="false"/>
<item android:drawable="@drawable/item_background_selected" android:state_pressed="true"/>
<item android:drawable="@drawable/item_background" android:state_focused="true"/>
<item android:drawable="@drawable/item_background"/>
</selector>
里面引用的是:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 这是画一个正文形,下面是对这个正文形的一些作用。 -->
<!-- 描边 -->
<stroke
android:width="0.5dip"
android:color="#ff505050"/>
<!-- 圆角 -->
<corners android:radius="2dip" ></corners>
<gradient
android:startColor="#ff404040"
android:centerColor="#ff383838"
android:endColor="#ff404040"
/>
</shape> 关键是调用,首先在GridView条目的XML文件里面写上:
android:background="@drawable/item_background_selector"
我就是因为这点没有写,才出现问题的,不能正常显示的。 最后:
<GridView android:listSelector="@drawable/item_background_selector" />
8、alignParentBottom:
有一个小Bug,在相对布局里面,如果在控件里面 用了alignParentBottom这些设置为true了,那么相对布局里面的gravity会失效。
9、activity切换之间:
activity切换之间overridePendingTransition
10、一条线的处理方式:
<!--可以用ImageView也可以用View. 用一张这样的图片:最关键的就是那张背景图片。 -->
<ImageView
android:layout_height="1dip"
android:layout_width="fill_parent"
android:layout_marginTop="8dip"
android:background="@drawable/devide_line"
/>
11、GPS小工具:
/**
* 保证这个类只存在一个实例 :单态
* @author chen
*
*/
public class GPSInfoProvider {
private static GPSInfoProvider mGpsInfoProvider;
private static Context context;
private MyLoactionListener listener;//都是保存只在一个这样的实例
LocationManager manager; //1.私有化构造方法
private GPSInfoProvider(){}; public static synchronized GPSInfoProvider getInstance(Context context){
if (mGpsInfoProvider == null) {
mGpsInfoProvider = new GPSInfoProvider();
GPSInfoProvider.context = context;
}
return mGpsInfoProvider;
}
/**
* 获取gps 信息
* @return
*/
public String getLocation(){
manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
//manager.getAllProviders(); // gps //wifi // 它 能够 得到所有的这种东西,但是不能确定哪个是最好的。
String provider = getProvider(manager);
// 注册位置的监听器 60000:变化多长时间更新一次,10:变化多少米更新一次 listener:发生变化的时间调用的回调方法
manager.requestLocationUpdates(provider, 60000, 10, getListener());
//获取上次存储进去的信息,如果没有返回空
SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
String location = sp.getString("location", "");
return location;
}
/**
* 保证只有一个实例
* @return
*/
private MyLoactionListener getListener(){
if (listener == null) {
listener = new MyLoactionListener();
}
return listener; } // 停止gps监听
public void stopGPSListener(){
manager.removeUpdates(getListener());
} private class MyLoactionListener implements LocationListener{
/**
* 当手机位置发生改变的时候 调用的方法
*/
@Override
public void onLocationChanged(Location location) {
String latitude ="latitude "+ location.getLatitude(); //weidu
String longtitude = "longtitude "+ location.getLongitude(); //jingdu
SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
Editor editor = sp.edit();
editor.putString("location", latitude+" - "+ longtitude);
editor.commit(); //最后一次获取到的位置信息 存放到sharedpreference里面
}
/**
* 某一个设备的状态发生改变的时候 调用 可用->不可用 不可用->可用
*/
@Override
public void onProviderDisabled(String provider) {
}
/**
* 某个设备被打开
*/
@Override
public void onProviderEnabled(String provider) {
}
/**某个设备被禁用
*
*/
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
} } /**
* @param manager 位置管理服务
* @return 最好的位置提供者
*/
private String getProvider(LocationManager manager){
Criteria criteria = new Criteria();//设置GPS的标准;尺度;准则
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setPowerRequirement(Criteria.POWER_MEDIUM);
criteria.setSpeedRequired(true);
criteria.setCostAllowed(true);
//true表示保返回已经打开的设备
return manager.getBestProvider(criteria, true);
} }
12、如何把一个应用程序设置为设备管理器:
如果一个程序设置成设备管理器,那么该程序就不会轻易被卸载。如果要卸载可以通过刷机或者在“位置与安全”->"选择设备管理器"可以讲该程序从设备管理器中移除。
/*把一个应用程序设置为设备管理器,那么这个软件就不能被xie zai
如果你在设置里面的做了取消激活又可以xie zai.
然后你可以在设置里面把这个选项给隐藏。 更为牛逼的功能,
file:///D:/android-sdk-windows/docs/guide/topics/admin/device-admin.html
只要有这个你可以使软件不能卸载,并且可以锁屏,清除手机数据等。
1.创建 MyAdmin 的广播接受者 继承 DeviceAdminReceiver,并注册它
2、写相应的XML文件
3.注册广播接受者为admin设备
*/
ComponentName mAdminName = new ComponentName(this, MyAdmin.class);
if (mService != null) {
if (!mService.isAdminActive(mAdminName)) {
Intent intent = new Intent(
DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mAdminName);
startActivity(intent);
}
}
2.2以上的android系统支持 1.创建 MyAdmin 的广播接受者 继承 DeviceAdminReceiver <receiver android:name=".MyAdmin">
<meta-data android:name="android.app.device_admin"
android:resource="@xml/my_admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver> my_admin.xml <?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<limit-password />
<watch-login />
<reset-password />
<force-lock />
<wipe-data />
</uses-policies>
</device-admin> 2.获取IDevicePolicyManager Method method = Class.forName("android.os.ServiceManager")
.getMethod("getService", String.class);
IBinder binder = (IBinder) method.invoke(null,
new Object[] { Context.DEVICE_POLICY_SERVICE });
mService = IDevicePolicyManager.Stub.asInterface(binder); 3.注册广播接受者为admin设备
ComponentName mAdminName = new ComponentName(this, MyAdmin.class);
if (mService != null) {
if (!mService.isAdminActive(mAdminName)) {
Intent intent = new Intent(
DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra (DevicePolicyManager.EXTRA_DEVICE_ADMIN,
mAdminName);
startActivity(intent);
}
}
13、程序开发中资源文件如何放置:
1. res目录建立一个文件夹 raw 在R文件中生成一个id的引用 最好推荐存放一些小的资源 几十k 几百K
2. assets 资产目录 不会把里面的内容在R 文件中生成一个引用 assets 不推荐我们存在1M 文件 appt 打包工具可能出现问题.
3. javame
把大的资源文件放置在src目录下 通过类加载器的方式 获取这个资源文件
导致我们应用程序的体积非常大.
4. 程序的主apk很小 素材文件 资源文件从服务器上下载
sdcard rom
一般游戏软件 大的oa软件
地图软件 离线地体20~100M~ 1G
14、子线程不能对UI进行更改,为什么Progress可以不断的更新进度呢?
/* 因为底层它已经实现是通过Handler更新的,你可以看源码,而且可以在子线程里面 写dismiss,其实底层就是显示: */
public void dismiss() {
if (Thread.currentThread() != mUiThread) {
mHandler.post(mDismissAction);
} else {
mDismissAction.run();
}
}
//如果不是主线和就告诉Handler去结束它,如果是主线程直接结束。
15、ImageView一些东西:
ImageView一些东西?src background ScaleType 区别?
其实ImageView与HTML下的DIV一样,其实所有的控件都可以看成HTML下的 DIV,你设置个SRC只是把它内部显示的那一部分填充了,所以有了padding 这个属性,如果你填写background把整个都填充了。
而ScaleType ScaleType的值分别代表的意义: ImageView是Android中的基础图片显示控件,该控件有个重要的属性是ScaleType,该属性用以表示显示图片的方式,共有8种取值 ScaleType.CENTER::图片大小为原始大小,如果图片大小大于ImageView控件,则截取图片中间部分,若小于,则直接将图片居中显示。 ScaleType.CENTER_CROP:将图片等比例缩放,让图像的短边与ImageView的边长度相同,即不能留有空白,缩放后截取中间部分进行显示。 ScaleType.CENTER_INSIDE:将图片大小大于ImageView的图片进行等比例缩小,直到整幅图能够居中显示在ImageView中,小于ImageView的图片不变,直接居中显示。 ScaleType.FIT_CENTER:ImageView的默认状态,大图等比例缩小,使整幅图能够居中显示在ImageView中,小图等比例放大,同样要整体居中显示在ImageView中。 ScaleType.FIT_END:缩放方式同FIT_CENTER,只是将图片显示在右方或下方,而不是居中。 ScaleType.FIT_START:缩放方式同FIT_CENTER,只是将图片显示在左方或上方,而不是居中。 ScaleType.FIT_XY:将图片非等比例缩放到大小与ImageView相同。即填充整个ImageView. ScaleType.MATRIX:是根据一个3x3的矩阵对其中图片进行缩放 任何一个View都有一个叫做layout的方法。非常好用。
tv_drag_view.layout(tv_drag_view.getLeft(), 260, tv_drag_view.getRight(), 280);
l Left position, relative to parent
t Top position, relative to parent
r Right position, relative to parent
b Bottom position, relative to parent //为布局中的某个控件显式指定其位置。
android.widget.RelativeLayout.LayoutParams layoutParams = (android.widget.RelativeLayout.LayoutParams) iv_drag_view.getLayoutParams();
layoutParams.leftMargin = x;
layoutParams.topMargin = y;
iv_drag_view.setLayoutParams(layoutParams);
Android学习笔记_61_手机安全卫士知识点归纳(1)状态/形状图形 GPS 设备管理器DeviceAdminReceiver ImageView属性的更多相关文章
- Android学习笔记_64_手机安全卫士知识点归纳(4) 流量统计 Log管理 混淆打包 加入广告 自动化测试 bug管理
android 其实就是linux 上面包装了一个java的框架. linux 系统下 所有的硬件,设备(网卡,显卡等) 都是以文件的方式来表示. 文件里面包含的有很多设备的状态信息. 所有的流量相关 ...
- Android学习笔记_63_手机安全卫士知识点归纳(3)分享 程序锁 服务 进程管理 widget
1.分享: Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.setT ...
- Android学习笔记_62_手机安全卫士知识点归纳(2)ListView重要属性 PopupWindow应用
1.缓存颜色: 为什么ListView在拖动的时间是黑色,而静止时间是自己的颜色是因为 ListView的缓存.只需一个配置即可.在这个ListView里面加上它即可. android:cacheCo ...
- Android学习笔记(3)----手机调试[OFFLINE]的解决方式
问题描述 今天用Android Studio开发了一个简单的调用摄像头的App,结果想调试的时候发现选择调试设备的对话框中,手机名称后面总是跟着一个[OFFLINE]的标识,只能选择启动AVD来进行调 ...
- Android学习笔记-获取手机内存,SD卡存储空间。
前面介绍到如何保存数据到手机内存或者SD卡,但是问题是,在保存以前,我们还需要对他们的空间(可用空间),进行判断,才可以进行后续操作,所以,本节我们就介绍如何获取手机内存以及Sd卡的空间. //这时获 ...
- Android学习笔记36:使用SQLite方式存储数据
在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...
- 【转】Pro Android学习笔记(三十):Menu(1):了解Menu
目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...
- 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge
目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...
- 【转】Pro Android学习笔记(十四):用户界面和控制(2):Text类控制
目录(?)[-] TextView 例子1在XML中设置autoLink属性 例子2在代码中设置autoLink属性 EditText AutoCompleteTextView MultiAutoCo ...
随机推荐
- pL/SQL 创建DBLIKN
某些时候,需要关联不同的数据库进行数据查询.操作等. 在Oracle中,关联不同的数据库进行表关联,就要用到了数据库连接(DB link). 创建DB link有两种方法:通过SQL语句创建,通过可视 ...
- 电影:换肤(Replace)
一个恐怖题材的电影,欧美的恐怖电影给我的感觉是一点也不恐怖,只是血腥,非常血腥,看这部电影的时候我还在吃中午饭........ 开头没看懂,应该都是女主的幻觉吧,女主本来是一个年近六十多岁的老太太,然 ...
- scss-@while指令
@while是一个循环指令,其后跟着一个表达式,如果表达式的返回值为false,则停止循环. scss代码实例如下: $i: 6; @while $i > 0 { .item-#{$i} { w ...
- H5跟ios、android交互跟数据对接
需求: APP要用H5页面做展示,而且要获取到对应的商品ID,用户点击H5页面跳回APP原生页面. 方法: 先要判断用户是ios还是android设备(这里只考虑ios跟android,因为它俩写法还 ...
- JVM Guide
Java Virtual Machine: the Essential Guide October 8th, 2014 - By Alexey Zhebel Introduction Java Vir ...
- android,getExternalStorageDirectory()和getExternalFilesDir()的区别
转载地址:https://blog.csdn.net/nugongahou110/article/details/48154859 之前看到一位网友的吐槽:当我把手机连接到电脑上时,在SD卡根目录看到 ...
- Mirco F-measure and Macro F-measure
- python进程与线程介绍
很多同学都听说过,现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统. 什么叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务.打个比方,你 ...
- 使用 yield生成迭代对象函数
https://www.cnblogs.com/python-life/articles/4549996.html https://www.liaoxuefeng.com/wiki/001431608 ...
- zookeeper的JavaAPI
org.apache.zookeeper.Zookeeper Zookeeper 是在 Java 中客户端主类,负责建立与 zookeeper 集群的会话,并提供方法进行操作. org.apache. ...