Menu Home

android

Android自定义系统属性

增加自定义属性涉及的文件: /build/toos/buildinfo.sh 比如这里增加了一个系统默认输入法的属性: echo “ro.product.IME.default=com.android.inputmethod.pinyin/.PinyinIME” 也可以加在device目录下的system.prop文件中,最终都会输出到build.prop rebuild出来的system.img中的build.prop就有了上面的属性。 通过下面的代码来访问这个自定义属性: String defaultIme = SystemProperties.get(“ro.product.IME.default”, “com.android.inputmethod.latin/.LatinIME”); 这里的SystemProperties为@hide类,所以需要在Android Source中使用上面的代码。 有了需要的属性后,就可以在Android机器中修改这个属性值了,但是需要注意一点: 如果是通过adb pull后再push到android机器的话,需要确保build.prop文件的权限为644,否则进不了系统。

Android对大图的处理

Scale big bitmap and set Keyguard Wallpaper private void processBigBitmapAndSetKeyguardWallpaper(Uri _uri) { InputStream inStream = null; //receive from uri InputStream reOpenStream = null; //Raise efficiency and avoid OOM InputStream outStream = null; //send to keyguard Uri uri = _uri; try { inStream = mContext.getContentResolver().openInputStream(uri); //API > 13 WindowManager wm = […]

解决KitKat对SD卡的读写限制

前情摘要 前提是你有Android源码或者设备已经ROOT,如果不考虑系统安全或者CTS等条件,可以选择修改系统文件来完全开放KitKat对SD卡的读写权限,让第三方APP以KitKat之前版本相同的方式操作SD卡。 修改文件:/system/etc/permissions/platform.xml 原始内容: <permission name=”android.permission.WRITE_EXTERNAL_STORAGE” > <group gid=”sdcard_r” /> <group gid=”sdcard_rw” /> </permission> 修改后: <permission name=”android.permission.WRITE_EXTERNAL_STORAGE” > <group gid=”sdcard_r” /> <group gid=”sdcard_rw” /> <group gid=”media_rw” /> </permission> 修改之后第三方APP只需要跟以前一样申请<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />来读写整个SD卡了。 ref: http://developer.huawei.com/devunion/ui/newsDetail.html?news=/devunion/news/n_00033.html

[转]Android Build System

Android Build System Android uses a custom build system to generate tools, binaries, and documentation. This document provides an overview of Android’s build system and instructions for doing a simple build. Android’s build system is make based and requires a recent version of GNU Make (note that Android uses advanced […]

Android:一种判断Navigation Bar位置的方法

public boolean isNavigationBottom() { WindowManager wm; Display display; DisplayMetrics realSize; DisplayMetrics windowSize; realSize = new DisplayMetrics(); windowSize = new DisplayMetrics(); wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); display = wm.getDefaultDisplay(); display.getRealMetrics(realSize); display.getMetrics(windowSize); if (windowSize.heightPixels != realSize.heightPixels) return true; else return false; } getRealMetrics()和getRealSize()的功能几乎一样。 see also: get physical screen size

Android:Preference默认值设置

在XML文件(advanced_preferences.xml)中为Preference设置默认值 <!– default value is a boolean –> <CheckBoxPreference android:defaultValue=”true” … /> <!– default value is a string –> <ListPreference android:defaultValue=”@string/pref_syncConnectionTypes_default” … /> 在代码中还需要调用 PreferenceManager.setDefaultValues(this, R.xml.advanced_preferences, false); 第三个参数接受一个BOOL值,含义如下: true:每次调用setDefaultValues都会导致Preference的初始化。 false:只初始化一次,重复调用setDefaultValues不会导致重复初始化。 PreferenceManager.setDefaultValues() This method takes three arguments: Your application Context. The resource ID for the preference XML file for which you […]

Android: get physical screen size

public void getRealSize (Point outSize) Added in API level 17 Gets the real size of the display without subtracting any window decor or applying any compatibility scale factors. The size is adjusted based on the current rotation of the display. The real size may be smaller than the physical size […]

Android Framework: 重启代码

private void RebootIntoRecovery() { PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); pm.reboot(“recovery”); } <uses-permission android:name=”android.permission.REBOOT” /> <manifest xmlns:android=”http://schemas.android.com/apk/res/android” package=”com.android.settings” coreApp=”true” android:sharedUserId=”android.uid.system”>

关于图片Drawable的宽高

在Android项目的res目录下有一些对应不同屏幕DPI的子文件夹: 分别对应的DPI为: ldpi (low) ~120dpi mdpi (medium) ~160dpi hdpi (high) ~240dpi xhdpi (extra-high) ~320dpi xxhdpi (extra-extra-high) ~480dpi 为什么要分这些文件夹呢? 为了能够自动适配不同的屏幕,使他们看上去大小(基本)一致。 我们可以使用一张分辨率为500×500的图片(test.jpg)做一些测试。 测试代码片段如下: public class MainActivity extends Activity { TextView tv; ImageView img; Drawable drawable; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); img = (ImageView)findViewById(R.id.img); tv = (TextView)findViewById(R.id.tv); drawable = getResources().getDrawable(R.drawable.test); […]

Android多窗口分屏(原生方法)

事实上KitKat已经可以实现多窗口分屏,只是功能不全,Google并没有把这个功能提供给用户。 使用am stack boxes可以查看当前系统存在的Activity Stack: am stack boxes output: Box id=1 weight=0.0 vertical=false bounds=[0,38][800,1208] Stack= Stack id=1 bounds=[0,38][800,1208] taskId=2: com.android.calendar/com.android.calendar.AllInOneActivity taskId=3: com.android.deskclock/com.android.deskclock.DeskClock Box id=0 weight=0.0 vertical=false bounds=[0,38][800,1208] Stack= Stack id=0 bounds=[0,38][800,1208] taskId=1: net.lnmcc.launcher/net.lnmcc.launcher.Launcher 从上面的输出我们看到当前有两个Stack,id分别为0和1。在Stack 1中存在了两个Task,这两个Task分别是Calender和DeskClock应用。而Launcher则是在Stack 0中。实际上,你会发现Launcher始终独占Stack 0。Android有如下规则: HOME stack: This is the stack with id = 0. This stack is […]

Android源码编译AIDL

在Eclipse下编译AIDL基本不用做什么特殊的工作,Eclipse都帮你完成了。但是如果需要在Android Source下编译AIDL,就需要你在Android.mk中加上AIDL文件声明。 LOCAL_SRC_FILES = \ $(call all-java-files-under, src) \ src/net/lnmcc/service/IMyService.aidl

Android电源管理-Healthd (2)

接上文 Android电源管理-Healthd (1) adb shell进入到/sys/class/power_supply目录,我们可以看到power_supply驱动创建的一些运行时文件(我的设备是Nuxus 7, Android 4.4.2, kernel 3.4.0): adb root adb shell cd /sys/class/power_supply ll 输出如下: lrwxrwxrwx root root 2014-09-19 14:30 ac -> ../../devices/i2c-0/0-0055/power_supply/ac lrwxrwxrwx root root 2014-09-19 14:30 battery -> ../../devices/i2c-0/0-0055/power_supply/battery lrwxrwxrwx root root 2014-09-19 14:30 usb -> ../../devices/i2c-0/0-0055/power_supply/usb lrwxrwxrwx root root 2014-09-19 14:30 wireless -> ../../devices/i2c-0/0-0055/power_supply/wireless […]

Android控制生成ODEX

如果没有指定DISABLE_DEXPREOPT,那么user版将生成odex,其他版本不会生成odex文件。 相关文件在build/core/main.mk ifneq (true,$(DISABLE_DEXPREOPT)) ifeq ($(user_variant),user) ifeq ($(HOST_OS),linux) WITH_DEXPREOPT := true endif endif endif 如果user版不想生成odex,那么需要定义 DISABLE_DEXPREOPT := true 如果eng版要生成odex,那么需要定义 WITH_DEXPREOPT := true 如果想单独控制某一应用是否生成odex,可以在应用的Android.mk中定义 WITH_DEXPREOPT := true