赞
踩
1, android上如何增加一个PC可见的盘符
1)在sysconfig1.fex中的luns中设置PC可见的盘数:luns=4
2)在init.rc中建立一个目录:mkdir /mnt/inet 0000 systemsystem
3).在vold.fstab中增加mounts的方法:dev_mount inet /mnt/inetauto /devices/virtual/block/nandh
4).更改config_evb.mk中:
PRODUCT_PROPERTY_OVERRIDES+= \
ro.additionalmounts=/mnt/extern_sd;/mnt/usbhost1;/mnt/inet \
ro.additionalshares=/mnt/extern_sd;/mnt/usbhost1;/mnt/inet \
ro.udisk.lable=crane-evb
5).更改frameworks/base/services/java/com/android/server/MountService.java中增加头文件:
import java.io.File;及在for (String path: volumesToShare) {
后增加:
String tmp ="/mnt/inet";
if(path.equals(tmp))
{
File f=newFile("/mnt/sdcard/mpgio.sys");
if(!f.exists()){
Slog.e(TAG, "not mount nandh");
return ;
}
Slog.e(TAG, "mount nandhsuccess");
}
2,Android4.0.1显示在切换中有时会出现红色边框
看是否有配置以下属性:
persist.sys.strictmode.visual
此属性值设成0
3,播放电影字幕和菜单重叠
播放外带字幕电影,播放电影且已有字幕出现在屏幕上时触摸屏幕调出子菜单,字幕和菜单重叠,下一条字幕出现时则恢复正常。
修改 Gallery2\src\com\android\gallery3d\app\MediaController.java 在initControllerView 函数最后加 mUpSubPos += 10; 即可
4,卡启动时,如何识别到nand并对其进行操作
关于要在卡启动识别到nand,有两种情况:
1. nand上已经有分区;
2. nand是裸片;
第一种情况下卡启动时nand驱动能够初始化成功,用户可以通过mount命令挂载nand的分区;
第二种情况下要先给nand一个虚拟的mbr,使得启动时nand能够初始化成功,
可以通过修改nand驱动的源码达到这一目的。
A10平台修改linux-3.0/drivers/block/sun4i_nand/nfd/mbr.c
A1X平台修改linux-3.0/drivers/block/sun5i_nand/nfd/mbr.c
具体改动如下:
int mbr2disks(struct nand_disk* disk_array)
{
int part_cnt = 0;
int part_index;
#if 0
if(_get_mbr()){
printk("get mbr error\n" );
return part_cnt;
}
part_index = 0;
for(part_cnt = 0; part_cnt<MAX_PART_COUNT; part_cnt++)
part_secur[part_index] = 0;
//查找出所有的LINUX盘符
for(part_cnt = 0; part_cnt < mbr->PartCount && part_cnt < MAX_PART_COUNT; part_cnt++)
{
//if((mbr->array[part_cnt].user_type == 2) || (mbr->array[part_cnt].user_type == 0))
{
PRINT("The %d disk name = %s, class name = %s, disk size = %d\n", part_index, mbr->array[part_cnt].name,
mbr->array[part_cnt].classname, mbr->array[part_cnt].lenlo);
disk_array[part_index].offset = mbr->array[part_cnt].addrlo;
disk_array[part_index].size = mbr->array[part_cnt].lenlo;
part_secur[part_index] = mbr->array[part_cnt].user_type;
part_index ++;
}
}
disk_array[part_index - 1].size = DiskSize - mbr->array[mbr->PartCount - 1].addrlo;
_free_mbr();
PRINT("The %d disk size = %lu\n", part_index - 1, disk_array[part_index - 1].size);
PRINT("part total count = %d\n", part_index);
#else
part_index = 1;
disk_array[0].offset = 0;
disk_array[0].size = DiskSize;
part_secur[0] = 0;
#endif
return part_index;
}
红色部分为改动的内容,旧版的SDK需要做适当的修改才可通过编译,
去掉:part_secur[0] = 0;
6,手机 拨号 apk拨号应用被隐藏
安装了contacts.apk和phone.apk,依然在launcher看不到拨号
frameworks/base/core/res/res/values/config.xml:581: <bool name="config_voice_capable">true</bool>
该属性为false时,会隐藏拨号,请注意自己的项目中是否覆盖了该属性
7,如何修改USB的Pid vid
根据项目需求,我们现需要修改平台的vendor Id & product Id,
在sys_config1.fex里面,有如下字段:
;--------------------------------
;--- USB Device
;--------------------------------
[usb_feature]
vendor_id = 0x18D1
mass_storage_id = 0x0001
adb_id = 0x0002
manufacturer_name = "USB Developer"
product_name = "Android"
serial_number = "20080411"
[msc_feature]
vendor_name = "USB 2.0"
product_name = "USB Flash Driver"
release = 100
luns = 2
相信vendor_id便是vid,改变此键值,即可达到改变vid的目的,那pid是怎么修改呢?
android的设置 -> 存储 -> USB计算机连接,有三个选项,分别是:媒体设备(MTP)、
相机(PTP)、USB大容量存储。我分别用这三种模式与电脑连接,得到的pid & vid信息
如下:
媒体设备(MTP) : vid = 18D1 ; pid = 0007
相机(PTP) : vid = 18D1 ; pid = 0009
USB大容量存储 : vid = 18D1 ; pid = 0003
请问pid根据什么规则变化呢?我该如何配置相应的值?
请参见sys_config1.fex和文件 init.sun5i.usb.rc
媒体设备(MTP): vid = 18D1 ; pid = 0007
对应:
on property:sys.usb.config=mtp,adb
write /sys/class/android_usb/android0/enable 0
write /sys/class/android_usb/android0/idVendor 18d1
write /sys/class/android_usb/android0/idProduct 0007
write /sys/class/android_usb/android0/functions $sys.usb.config
write /sys/class/android_usb/android0/enable 1
start adbd
setprop sys.usb.state $sys.usb.config
其它类似
8,外部SD卡无法写入
只能读,程序无法写入
Androidmanifest权限声明内容:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
<group gid="sdcard_rw"/>
</uses-permission>
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" >
<group gid="media_rw"/>
</uses-permission>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS">
</uses-permission>
看到sd目录和extsd目录的权限相同,都是system,但用户组不一样
sd是sdcard_rw,外部sd是media_rw
可以简单处理,修改一下extsd的用户组到sdcard_rw
修改system/vold/Volume.cpp 542行
if (primaryStorage) {
// Special case the primary SD card.
// For this we grant write access to the SDCARD_RW group.
gid = AID_SDCARD_RW;
} else {
// For secondary external storage we keep things locked up.
gid = AID_MEDIA_RW;
}
改为
if (1) {
// Special case the primary SD card.
// For this we grant write access to the SDCARD_RW group.
gid = AID_SDCARD_RW;
} else {
// For secondary external storage we keep things locked up.
gid = AID_MEDIA_RW;
}
9,高清播放器删除最后一张图片时,图片再无法移动问题
改 Gallery2\src\com\android\gallery3d\ui\PhotoView.java
public void startSlideInAnimation(int direction) {
...
mTransitionMode = direction; 改成 mTransitionMode = TRANS_NONE;
}
10,A10的v1.4版本没有声音
配置文件没有加pa_dev的权限导致:
比如crane-evb-v12r:对应目录android4.0.4\device\softwinner\crane-evb-v12r\ueventd.sun4i.rc
里面加pa_dev的权限:
/dev/pa_dev 0777 system system
11,阿拉伯文下高清播放器不能搜索到.avi格式的媒体文件
由于阿拉伯文下 .avi后缀的视频,后缀名被转码后识别不了,需要修改以下地方。
frameworks\base\media\java\android\media\MediaFile.java
public static MediaFileType getFileType(String path) {
int lastDot = path.lastIndexOf(".");
if (lastDot < 0)
return null;
return sFileTypeMap.get(path.substring(lastDot + 1).toUpperCase(Locale.ENGLISH));
}
public static MediaFileType getFileType(String path) {
int lastDot = path.lastIndexOf(".");
if (lastDot < 0)
return null;
return sFileTypeMap.get(path.substring(lastDot + 1).toUpperCase(Locale.ENGLISH));
}
public static MediaFileType getFileType(String path) {
int lastDot = path.lastIndexOf(".");
if (lastDot < 0)
return null;
return sFileTypeMap.get(path.substring(lastDot + 1).toUpperCase(Locale.ENGLISH));
}
12,字体设置为大、超大时,竖屏在解锁界面,解锁的图标显示不全
800x600,lcd_denisty 160
frameworks/base/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock.xml
适当加大72行的android:layout_weight="1"
这样解锁部分的面积会增加,解决这个问题
其他分辨率需要修改其他layout文件夹下的keyguard_screen_tab_unlock.xml
13,设置-安全-屏幕锁定-图案界面,在坚屏时不显示取消/下一步
800x600,lcd_denisty 160
packages/apps/Settings/res/layout-sw600dp/choose_lock_pattern_tutorial.xml
把两个layout_marginTop都适当改小
14,音效里的Normal和Flat功能反
frameworks/base/media/libeffects/lvm/wrapper/Bundle/EffectBundle.h
gEqualizerPresets数组,名字可以随意修改
14,动态壁纸 线性光幕效果有黑块
将壁纸设为动态壁纸中的“线性光幕效果”时,在主界面旋转屏幕时未显示完整,即往边上拉存在黑块问题。
修改:
android\packages\wallpapers\Basic\src\com\android\wallpaper\nexus\NexusRS.java
@Override
public void setOffset(float xOffset, float yOffset, int xPixels, int yPixels) {
//mXOffset = xOffset;
//mScript.set_gXOffset(xOffset);
}
15,android4.0量产时用户区不能格式化
版本为v1.0,量产配置已经加入erase_flag=1,仍然不能格式化
16,如何修改setting里面各字体对应的大小
感觉setting里面字体大小选择的变化幅度太大,希望小不要太小,特大不要太大,每级变化的幅度缩小点该如何修改
android4.0\packages\apps\Settings\res\values\arrays.xml文件里
<string-array name="entryvalues_font_size" translatable="false">
<item>0.85</item>
<item>1.0</item>
<item>1.15</item>
<item>1.30</item>
</string-array>
默认是0.15的梯度改成合适的梯度如
<string-array name="entryvalues_font_size" translatable="false">
<item>0.90</item>
<item>1.0</item>
<item>1.10</item>
<item>1.20</item>
</string-array>
17,user模式下gsensor不可用
不能编译成user模式只能ENG模式,user模式下Gsensor不能旋转
mma7660出现过这种情况,原因是sensors.exDroid.so编译出来以后没有安装到/system/lib/hw下可以在build/target/product/generic_no_telephony.mk中加入 sensors.exDroid,再重新编译即可
18,浏览器退出和浏览器为android模式时看在线视频卡
A10
1:在浏览时有时偶尔会退出
2:浏览器用android模式,看在线视频十几分钟左右后会卡,但用ipad模式不会卡
1. 需要具体分析问题,我们其它客户案上浏览正常
2。android模式采用的flash格式播放,而ipad采用的html5。flash由于自身格式和片源分割的关系,在线视频有机率产生不同步或卡顿问题。该问题由flash自身引起,这也是为何flash会逐渐被html5取代的一个方面
19,3g dongle在特定的区域死机
dongle在信号好的地方可以正常使用,在信号差的地方,连接慢,且使用几分钟后会出现蓝屏、黑屏、死机等现象
3G dongle属于射频产品,对USB线的要求比较高,特别是在信号不强的情况下,使用时使用带有屏蔽处理较好的USB OTG线即可。
20,android4.0.3中camera延时录制是什么功能?
该功能主要是拍摄车水马龙、行云流水等用的;假设录制的正常帧率是15fps,如果设置成延时1s,则代表1s会录制1帧,如果想实际录制的视频有1s的内容(15帧),则实际需要录制15s;一些客户反馈,录制一段视频后,实际播放的时间很短,就是因为这个原因
21,android4.0中如何自动弹出USB盘
修改 frameworks\base\packages\SystemUI\src\com\android\systemui\usb\StorageNotification.java
//Intent intent = new Intent();
// Intent intent = new Intent();
// intent.setClass(mContext, com.android.systemui.usb.UsbStorageActivity.class);
// PendingIntent pi = PendingIntent.getActivity(mContext, 0, intent, 0);
// setUsbStorageNotification(
// com.android.internal.R.string.usb_storage_stop_notification_title,
// com.android.internal.R.string.usb_storage_stop_notification_message,
// com.android.internal.R.drawable.stat_sys_warning, false, true, pi) ;
//intent.setClass(mContext, com.android.systemui.usb.UsbStorageActivity.class);
//PendingIntent pi = PendingIntent.getActivity(mContext, 0, intent, 0);
//setUsbStorageNotification(
// com.android.internal.R.string.usb_storage_stop_notification_title,
// com.android.internal.R.string.usb_storage_stop_notification_message,
// com.android.internal.R.drawable.stat_sys_warning, false, true, pi);
...
}
void updateUsbMassStorageNotification(boolean available) {
StorageManager mStorageManager = null;
if (available)
{
if(mContext != null)
{
mStorageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE);
}
else
{
Slog.w(TAG, "mContext is null ,getSystemService error !");
}
// Intent intent = new Intent();
// intent.setClass(mContext, com.android.systemui.usb.UsbStorageActivity.class);
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// PendingIntent pi = PendingIntent.getActivity(mContext, 0, intent, 0);
// setUsbStorageNotification(
// com.android.internal.R.string.usb_storage_notification_title,
// com.android.internal.R.string.usb_storage_notification_message,
// com.android.internal.R.drawable.stat_sys_data_usb,
// false, true, pi);
if(mStorageManager != null)
{
mStorageManager.enableUsbMassStorage();
}
// intent.setClass(mContext, com.android.systemui.usb.UsbStorageActivity.class);
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//
// PendingIntent pi = PendingIntent.getActivity(mContext, 0, intent, 0);
// setUsbStorageNotification(
// com.android.internal.R.string.usb_storage_notification_title,
// com.android.internal.R.string.usb_storage_notification_message,
// com.android.internal.R.drawable.stat_sys_data_usb,
// false, true, pi);
// intent.setClass(mContext, com.android.systemui.usb.UsbStorageActivity.class);
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//
// PendingIntent pi = PendingIntent.getActivity(mContext, 0, intent, 0);
// setUsbStorageNotification(
// com.android.internal.R.string.usb_storage_notification_title,
// com.android.internal.R.string.usb_storage_notification_message,
// com.android.internal.R.drawable.stat_sys_data_usb,
// false, true, pi);
// intent.setClass(mContext, com.android.systemui.usb.UsbStorageActivity.class);
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//
// PendingIntent pi = PendingIntent.getActivity(mContext, 0, intent, 0);
// setUsbStorageNotification(
// com.android.internal.R.string.usb_storage_notification_title,
// com.android.internal.R.string.usb_storage_notification_message,
// com.android.internal.R.drawable.stat_sys_data_usb,
// false, true, pi);
// intent.setClass(mContext, com.android.systemui.usb.UsbStorageActivity.class);
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//
// PendingIntent pi = PendingIntent.getActivity(mContext, 0, intent, 0);
// setUsbStorageNotification(
// com.android.internal.R.string.usb_storage_notification_title,
// com.android.internal.R.string.usb_storage_notification_message,
// com.android.internal.R.drawable.stat_sys_data_usb,
// false, true, pi);
// intent.setClass(mContext, com.android.systemui.usb.UsbStorageActivity.class);
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//
// PendingIntent pi = PendingIntent.getActivity(mContext, 0, intent, 0);
// setUsbStorageNotification(
// com.android.internal.R.string.usb_storage_notification_title,
// com.android.internal.R.string.usb_storage_notification_message,
// com.android.internal.R.drawable.stat_sys_data_usb,
// false, true, pi);
// intent.setClass(mContext, com.android.systemui.usb.UsbStorageActivity.class);
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//
// PendingIntent pi = PendingIntent.getActivity(mContext, 0, intent, 0);
// setUsbStorageNotification(
// com.android.internal.R.string.usb_storage_notification_title,
// com.android.internal.R.string.usb_storage_notification_message,
// com.android.internal.R.drawable.stat_sys_data_usb,
// false, true, pi)
}
else if(!mUmsAvailable || !atLeastOneDeviceMounted())
{
setUsbStorageNotification(0, 0, 0, false, false, null);
if(mStorageManager != null)
{
mStorageManager.disableUsbMassStorage();
}
}
}
22,电池提示无法获取电池使用数据
设置--电池--,里面提示无法获取电池使用数据
android4.0(1.2版本之后,之前没有此功能)
在device\softwinner\crane-xxx\overlay\frameworks\base\core\res\res\xml 目录下, 增加 power_profile.xml
power_profile.xml 内容如下
<?xml version="1.0" encoding="utf-8"?>
<!--
**
** Copyright 2009, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License")
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<device name="Android">
<item name="none">0</item>
<item name="screen.on">55</item>
<item name="bluetooth.active">142</item>
<item name="bluetooth.on">1</item>
<item name="bluetooth.at">35690</item>
<item name="screen.full">115</item>
<item name="wifi.on">4</item>
<item name="wifi.active">130</item>
<item name="wifi.scan">104</item>
<item name="dsp.audio">75</item>
<item name="dsp.video">75</item>
<item name="radio.active">300</item>
<item name="gps.on">170</item>
<item name="radio.scanning">70</item>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。