目前我知道的有三种方法:
代码如下 | 复制代码 |
ImageView imageView = (ImageView)findViewById(R.id.xxx);方法一:使用Runnalbe()来加载 imageView.setBackgroundResource(R.anim.xxxxx); |
方法二:使用AsyncTask异步加载启动
代码如下 | 复制代码 |
imageView.setBackgroundResource(R.anim.xxxxx); |
方法三:通过添加addOnPreDrawListener来自动加载
代码如下 | 复制代码 |
imageView.setBackgroundResource(R.anim.xxxxx); |
以上三种方法经过测试没有问题,另外网上有一些说使用重写Activity的onWindowFocusChanged()方法来实现,但是还是有不足,得改变焦点才能触发,虽然理论可以自动实现改变焦点,感觉还是不甚可取。
下面介绍一篇Android出现“Read-only file system”解决办法 有碰到这类问题的朋友可参考参考。Android-出现Read-only file system的解决方法
输入命令:
代码如下 | 复制代码 |
mount -o remount rw /system |
(每次都要执行一次)
有的朋友说是是“/”的问题,命令改为:adb push AlarmClock.apk systemapp 即“/”改为“”即可。 adb push 电脑路径 模拟器路径 在电脑路径中必须用“” 而模拟器中必须是“/” 并且模拟器的跟路径是是只读的
操作设备文件系统上的文件结果遇到"... Read-only file system"。
解决办法:
1. 最简单的,adb remount
2. 不行的话,adb shell su之后将文件系统remount为读写权限: mount -o rw,remount /system。出于安全考虑,记得完事后remount回只读: mount -o ro,remount /system
3. 和方法2类似,mount -o rw,remount -t ext3 /dev/block/mmcblk1p21 /system
1. 使用命令:adb push AlarmClock.apk /system/app
提示:
代码如下 | 复制代码 |
failed to copy 'AlarmClock.apk' to '/system/app/AlarmClock.apk': Read-only file system |
我们知道安卓系统中通话时长应该是归Callog管,所以建议去查查ContactProvider,或者是TelephonyProvider
Service测试
可以的通话开始的时候启动Service 记录当前时间A, 然后stopSelf(); 另外在通话结束的时候再次启动一下Service,再次获得当前时间B, 然后把时间A和B进行比较处理
String time = Long.toString(比较后处理的时间)
然后调用
代码如下 | 复制代码 |
Toast.makeText(this, time, Toast.LENGTH_SHORT).show(); |
使之显示出来 ,再stopSelf();
获取联系人通话时间的长短java代码
代码如下 | 复制代码 |
Cursor cursor = getContentResolver().query(Calls.CONTENT_URI, new String[] { Calls.DURATION, Calls.TYPE, Calls.DATE }, null, null, Calls.DEFAULT_SORT_ORDER); MainActivity.this.startManagingCursor(cursor); boolean hasRecord = cursor.moveToFirst(); long incoming = 0L; long outgoing = 0L; int count = 0; while (hasRecord) { int type = cursor.getInt(cursor.getColumnIndex(Calls.TYPE)); long duration = cursor.getLong(cursor.getColumnIndex(Calls.DURATION)); switch (type) { case Calls.INCOMING_TYPE: incoming += duration; break; case Calls.OUTGOING_TYPE: outgoing += duration; default: break; } count++; hasRecord = cursor.moveToNext(); } Toast.makeText(MainActivity.this, "共计 " + count + "次通话 . 总通话时长 " + (incoming + outgoing) + "秒. 其中接听 " + incoming + " 秒, 拔打 " + outgoing + " 秒.", Toast.LENGTH_LONG).show(); |
然后Widget无法安装和执行!在参考了官方论坛上的相同问题的一个帖子后,也没有实质的解决办法(主要是楼主不厚道,解决了也不说明如何解决)。
最终还是自己摸索解决了,因为我用的是win7,默认启动SDK中的Eclipse不是管理员权限,导致如上错误。
解决的办法是:
1、打开AVD所在的目录(默认是C:Users你的名称.android),将.android目录及其子目录的只读属性去掉;
2、在SDK的Eclipse.exe上右键选择“以管理员身份运行”,然后启动SDK再运行widget;
需要注明的是这个是win7下的解决办法,我是直接用的WAC SDK进行安装测试的。
其它区别总结
1. 出现“Project has no target set. Edit the project properties to set one.”的错误
Eclipse导入步骤:
1. File.../Import.../General/Existing Projects into Workspace
2. 点Browse按钮,选择要导入的项目所在目录,点Finish
3. 如果出现“Project has no target set. Edit the project properties to set one.”的错误,则需要在该项目的属性里选中Project Build Target的Android版本
4. 文件夹中会自动追加一个gen的小目录,里面是自动生成的R.java文件,如果导入的文件中已有R.java,则会报错,此时只要将原来的R.java文件删掉即可。
如果有提示关于AndroidManifest.xml的错误,请选中此项目,并右键选择Android Tools->Fix Project,将会自动帮你修复错
误。
2. Could not find *.apk
1) 选择工程的Properties->Java Build Path->Libraries,去掉默认的Android包;
2) 点击左侧的Android标签,在右边的Project Build Target中选择Android 2.0;
3) 右键单击工程,选择Android Tools->Fix Project Properties.
有时候也可能是jdk版本的问题,改了jdk版本后,重启下eclipse
3、emulator: ERROR: the user data image is used by another emulator. Aborting
没有正常关闭导致的,删除android-sdk-windows/.android/avd/对于版本/下的以.lock结尾的文件夹就行
4. qemu: could not open disk image E:/Android/sdcard.img
原意是备份一个hosts文件,然后修改hosts的内容的(作用大家懂的),用RE复制,然后粘贴就出现这个乱码的文件了,用RE删,提示删除成功,但再次进入/etc又会出现这个文件,我删了N次这个文件都阴魂不散,彻底晕倒了。
由于hosts文件在手机rom中,把手机接上电脑只能看到TF卡上的内容,所以只能在手机上想办法了。
最后,解决办法是通过终端(shell)把它OK掉(删掉),估计用USB接到电脑用adb shell也可以,我没试验过。
手机需要装上的软件如下:
Better Terminal Emulator(超级终端)
Root Explorer(简称RE)
超级终端的好处是基本与linux的终端一致,可以用tab键自动补全路径(重点),在超级终端中tab键是 控制键+数字键9 ,我把控制键设为音量放大键,所以是按 音量放大键+9。
自动补全路径:例如路径是/usr/bin/autostart.sh
那么输入/usr/bin/aut 按tab就能补全为 /usr/bin/autostart.sh
这样就能使不能输入的乱码字符自动补上了。
步聚:
1、打开终端后用 ls 命令查看要删除的文件名
ls -a 文件路径
-a 表示显示隐藏文件
eg: ls -a /etc/
2、用 rm 命令删除文件,如果路径存在空格则要用双引号(”")把路径括起来。
rm -f 文件路径
-f 不询问直接删除
eg: rm -f “/etc/hosts -乱码部份”
如果提示 read-only system,则用RE挂载为读写。
以上,折腾完毕。(原文:安卓主题下载网)