Anroid4.4新增/system/priv-app/目录的权限问题

@(Android)[permission]

今天在项目中定义permission时使用了android:protectionLevel="signatureOrSystem", signatureOrSystem官方解释

A permission that the system grants only to applications that are in the Android system image or that are signed with the same certificate as the application that declared the permission

该项目设置如下并且在/system/app/文件中:

//AndroidManifest.xml
android:sharedUserId="android.uid.system"

<permission
    android:name="com.android.permission.service.HANDOFF"
    android:label="@string/perm_access_service"
    android:protectionLevel="signatureOrSystem" >
</permission>

//Android.mk
LOCAL_CERTIFICATE := platform

而Contacts应用需要使用到该权限的接口,存放放在/system/app/文件中,Contacts配置如下:

//Android.mk
LOCAL_PACKAGE_NAME := Contacts
LOCAL_CERTIFICATE := shared

由于这两个应用签名不一样,一个是platform签名,另外一个是shared签名,本以为两个应用都是System级别可以访问接口,可是Contacts在调用接口时crash了。

最终发现是因为Android4.4添加一个/system/priv-app/目录,只有存放在该目录下的应用才被看做真正的System特权应用, 才能在签名不一致的情况下使用signatureOrSystem权限。

加入/system/priv-app/目录方法: 在Android.mk中增加 LOCAL_PRIVILEGED_MODULE := true

ApplicationInfo.FLAG_SYSTEM标志表示该应用程序的apk被捆绑在/system分区。 一个新的隐藏的标志FLAG_PRIVILEGED已经出台,反映了访问这些权限的实际权利.


BluetoothAdapter使用

2014-11-22 10:52:00 by suphy

Android Quick Look: BluetoothAdapter

Android SDK附带强大的蓝牙适配器,蓝牙api能够管理本地扫描附近的蓝牙设备,蓝牙设备之间传输数据,等等。本指导将向您展示最基本的必要步骤开始在Android SDK编程蓝牙应用程序。

Step 1: Import the Bluetooth Package

import android.bluetooth.*;

Step 2: Set Bluetooth Permissions

添加permission:

<uses-permission android:name="android.permission.BLUETOOTH" />

对于更高级的蓝牙任务,如设置本地设备为我们将在本教程的名字,你就需要配置蓝牙管理员权限。添加以下行这样做:

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

Step 3: Access the Bluetooth Adapter ...

read more

AndroidManifest中属性说明

2014-06-04 14:03:00 by suphy

AndroidManifest 中original-package标签


@(示例笔记本)[AndroidManifest|original-package|package]

AndroidManifest.xml中:

  • 标签中package属性用于设置应用程序的进程名,即在运行时使用ddms查看到的进程名。
  • 标签用以设置应用源码包名,即Java文件所在的源码程序包层次,android工程中真实的源代码层次结构。

package属性若与android:name值相同,配置组建时android:name属性值 可以使用".ClassName"形式。 使用标签后,在中的android:name属性需要写完整的包名,".ClassName"形式无效。

注意:标签中package属性只是告诉系统应用的进程名;因此进程名(Manifest中package属性的值)与的值可以不一样。

需要注意:

<manifest
    xmlns:android="http://schemas.android.com ...
read more

如何让Android应用启动的体验更顺畅

2014-05-29 20:34:00 by suphy

如何让Android应用启动的体验更顺畅

Android 中应用启动的时候,首先会加载一个预览窗口(由Activity 的主题决定的)用于对用户操作的即时响应。一旦真正的内容加载完毕,预览窗口将淡出,内容窗口相应淡入。

Android应用window预览效果是打开的,可以通过android:windowDisablePreview = true来禁止window预览效果。

为了避免出现白色或黑色界面,可以通过修改activity的theme使启动过程更流畅。

The perfect preview window

如果你的Activity没有ActionBar,那就在Activity 的主题里面禁用掉ActionBar,这样在预览窗口中就不会出现ActionBar了。

另外,因为默认的预览窗口是纯黑色的,如果你的Activity 背景是其他颜色,那么为了启动连贯顺畅,可以通过覆写window的背景颜色实现。如下:

  1. 自定义主题,修改windowBackground

    <style name="Theme.Calculator" parent=“@android:style/Theme.Holo.NoActionBar">
        <item name="android:windowBackground”>@android ...
read more

ListView焦点问题

2014-05-29 20:03:00 by suphy

android:descendantFocusability 焦点 父控件与子控件焦点

ListView item包含ImageButton、Button、CheckBox等控件时无法获取焦点,造成点击item无响应。

可以使用android:descendantFocusability="blocksDescendants" 来解决

该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。

属性的值有三种:

  • beforeDescendants:viewgroup会优先其子类控件而获取到焦点
  • afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
  • blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

通常我们用到的是第三种,即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性就好了

read more

View及TextView属性说明

2014-05-23 09:37:00 by suphy

View属性说明

android:alpha
关联方法: setAlpha(float)
属性说明: 视图透明度,值在0-1之间。0为完全透明,1为完全不透明。

android:background
关联方法: setBackgroundResource(int)
属性说明: 视图背景

android:clickable
关联方法: setClickable(boolean)
属性说明: 视图是否可点击

android:contentDescription
关联方法: setContentDescription(CharSequence)
属性说明: 设置View的备注说明,作为一种辅助功能提供,为一些没有文字描述的View提供说明

android:drawingCacheQuality 关联方法: setDrawingCacheQuality(int)
属性说明: "设置绘图时半透明质量。有可以取以下3个值 auto——默认,由框架决定 high——高质量,使用较高的颜色深度,消耗更多的内存 low ...

read more