1. 多个PendingIntent时如何区分不同的Intent?
调用下面两个函数可以获得对应的PendingIntent,如果requestCode相同,获得的PendingIntent里的intent总是最后一个。所以要想区分,需要指定不同的requestCode.
public static PendingIntent getActivity(Context ontext, int requestCode, Intent intent, int flags);
public static PendingIntent getService(Context ontext, int requestCode, Intent intent, int flags);
2. 使布局大小产生变化时,伴随着动画效果:
<LinearLayout android:id="@+id/container" android:animateLayoutChanges="true" // 设置layout的该属性 ... />
3. FrameLayout使用注意
FrameLayout的子控件默认是层层叠加在左上角的,若要控制各个子控件的位置布局,可以在子控件及FrameLayout之间加一层LinearLayout或RelativeLayout,并把这两个Layout的Params设置为FILL_PARENT,然后设置子控件在LinearLayout或RelativeLayout中的位置即可。
4. 自定义permission
在android系统的安全模型中,如果应用需要执行某些操作,就需要声明使用这个操作对应的权限。(在manifest文件中 添加<uses-permission>标记)
app可以自定义属于自己的permission 或属于开发者使用的同一个签名的permission。定义一个permission 就是在menifest文件中添加一个permission标签:
<permission android:description="string resource"
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permissionGroup="string"
android:protectionLevel=["normal" | "dangerous" |
"signature" | "signatureOrSystem"] />
参数说明:
android:description :对权限的描述,一般是两句话,第一句话描述这个权限所针对的操作,第二句话告诉用户授予app这个权限会带来的后果
android:label: 对权限的一个简短描述
android:name :权限的唯一标识,一般都是使用包名加权限名
android:permissionGroup: 权限所属权限组的名称
android:protectionLevel: 权限的等级:
normal :低风险权限,在安装的时候,系统会自动授予权限给 application,不会提示用户
dangerous :高风险权限,系统在安装声明此类权限的app时会提示用户
signature :签名权限,权限表明的操作只针对使用同一个证书签名的app开放
signatureOrSystem :与signature类似,只是增加了rom中自带的app的声明
例子:指定一个BroadcastReceiver的权限,达到目的:具有相同签名的APP发的broadcast才能被reveiver收到。
假设创建两个app, appA, appB, appA注册了一个BroadcastReceiver,appB发送广播。
1. appA的menifest文件中声明permission:
<permission android:name="settings.permission.DHCP_VENDOR"
android:protectionLevel="signature" >
注册Broadcast Receiver,并指定了给当前Receiver发送消息方需要的权限:
<receiver android:name=".SettingsReceiver"
android:permission="gaia.settings.permission.DHCP_VENDOR">
<demand-filter>
<action gaia:name="settings.demand.action.DHCP_VENDOR" />
</demand-filter>
</receiver>
2. appB的menifest文件中声明使用指定的权限:
<uses-permission android:name="settings.permission.DHCP_VENDOR" />
假设appA与appB使用同一证书签名,这样appB给appA发送消息,appA就可以收到;若其它app未声明相应权限或者与appA签名不一样,appA是收不到的。
用于安全相关控制。参考:http://berdy.iteye.com/blog/1782854