Android获取通话时间程序代码

 更新时间:2016年9月20日 20:00  点击:1487
本文章总结了一段Android获取通话时间程序代码,有需要的朋友可参考一下。

我们知道安卓系统中通话时长应该是归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();
Android动画背景图自动播放的实现程序,我们在开发android应用的时候,经常会遇到类似从网络加载大图,在加载的过程中,在图片要显示的ImageView位置,先显示一个转圈的loading动画图,给用户的体验会更好一些,要实现这个动画图很简单,使用在/res/anim中定义xml的方式,下面我总结三种方法

目前我知道的有三种方法:

 代码如下 复制代码

ImageView imageView = (ImageView)findViewById(R.id.xxx);方法一:使用Runnalbe()来加载

imageView.setBackgroundResource(R.anim.xxxxx);
final AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getBackground();
imageView.post(new Runnable() {
    @Override
        public void run()  {
            animationDrawable.start();
        }
});

方法二:使用AsyncTask异步加载启动

 代码如下 复制代码

imageView.setBackgroundResource(R.anim.xxxxx);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();
RunAnim runAnim=new RunAnim();
runAnim.execute("");
 
class RunAnim extends AsyncTask<String, String, String> {
        @Override
        protected String doInBackground(String... params) {
            if (!animationDrawable.isRunning()) {
                animationDrawable.stop();
                animationDrawable.start();
            }
            return "";
        }
}

方法三:通过添加addOnPreDrawListener来自动加载

 代码如下 复制代码

imageView.setBackgroundResource(R.anim.xxxxx);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();
imageView.getViewTreeObserver().addOnPreDrawListener(preDrawListener);
 
OnPreDrawListener preDrawListener = new OnPreDrawListener(){
    @Override
    public boolean onPreDraw() {
        animationDrawable.start();
        return true; //必须要有这个true返回
    }
};

以上三种方法经过测试没有问题,另外网上有一些说使用重写Activity的onWindowFocusChanged()方法来实现,但是还是有不足,得改变焦点才能触发,虽然理论可以自动实现改变焦点,感觉还是不甚可取。

在使用java开时,WAC启动Android模拟器时出现“transfer error: Read-only file system”错误,下面我们来看解决办法。

然后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

Android中删除文件名显示乱码的文件方法 有需要的朋友可参考一下

原意是备份一个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挂载为读写。

以上,折腾完毕。(原文:安卓主题下载网)

本文章介绍了Android Sqlite 数据应用与初始化,有需要的同学可参考一下

创建数据库

Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:

•构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。
•onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。
•onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。
下面示例代码展示了如何继承 SQLiteOpenHelper 创建数据库:

 代码如下 复制代码

 public class DatabaseHelper extends SQLiteOpenHelper {    
  DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version)
  {    
    super(context, name, cursorFactory, version);    
     }    
    
     @Override   
     public void onCreate(SQLiteDatabase db) {    
         // TODO 创建数据库后,对数据库的操作    
     }    
    
     @Override   
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    
         // TODO 更改数据库版本的操作    
     }    
    
 @Override   
 public void onOpen(SQLiteDatabase db) {    
         super.onOpen(db);      
         // TODO 每次成功打开数据库后首先被执行    
     }    
 }    
 


接下来讨论具体如何创建表、插入数据、删除表等等。调用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 实例,具体调用那个方法,取决于你是否需要改变数据库的内容:

 

 代码如下 复制代码
db=(new DatabaseHelper(getContext())).getWritableDatabase();
 return (db == null) ? false : true;

 


上面这段代码会返回一个 SQLiteDatabase 类的实例,使用这个对象,你就可以查询或者修改数据库。

当你完成了对数据库的操作(例如你的 Activity 已经关闭),需要调用 SQLiteDatabase 的 Close() 方法来释放掉数据库连接。

android系统下每个程序的数据存放在 /data/data/(package name)/ 目录下,数据库则是在/dababases/目录下..
所以,你只要用FileInputStream读取原数据库,再用FileOutputStream把读取到的东西写入到那个目录就可以了..

操作方法:
1. 把原数据库包括在项目源码的 res/raw 目录下.
2.创建一个类来控制database..如下:


代码

 代码如下 复制代码

public class DatabaseManager{
                private final int BUFFER_SIZE = 400000;
                public static final String DB_NAME = "myDatabase.db"; //保存的数据库文件名
                public static final String PACKAGE_NAME = "com.android.ImportDBTest";//包名
                public static final String DB_PATH = "/data"
                     + Environment.getDataDirectory().getAbsolutePath() + "/"
                     + PACKAGE_NAME; //在手机里存放数据库的位置

                private SQLiteDatabase database;
                private Context context;

                DBManager(Context context) {
                     this.context = context;
                }

                public void openDatabase() {
                     this.database = this.openDatabase(DB_PATH + "/" + DB_NAME);
                }

                private SQLiteDatabase openDatabase(String dbfile) {
                     try {
                     if (!(new File(dbfile).exists())) {  //判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库
                     InputStream is = this.context.getResources().openRawResource(
                     R.raw.myDatabase); //欲导入的数据库
                     FileOutputStream fos = new FileOutputStream(dbfile);
                     byte[] buffer = new byte[BUFFER_SIZE];
                     int count = 0;
                     while ((count = is.read(buffer)) > 0) {
                     fos.write(buffer, 0, count);
                     }
                     fos.close();
                     is.close();
                     }
                     SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile,
                     null);
                     return db;
                     } catch (FileNotFoundException e) {
                     Log.e("Database", "File not found");
                     e.printStackTrace();
                     } catch (IOException e) {
                     Log.e("Database", "IO exception");
                     e.printStackTrace();
                     }
                     return null;
}

然后在需要用到数据库的时候,用实例化一个DatabaseManager类,调用其openDatabase方法就可以返回一个
SQLiteDatabase对象了..如下:
代码

 代码如下 复制代码

SQLiteDatabase db = new DBManager(this).openDatabase();


这里只是安卓手机开发的一个角

[!--infotagslink--]

相关文章

  • PHP成员变量获取对比(类成员变量)

    下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
  • 在java中获取List集合中最大的日期时间操作

    这篇文章主要介绍了在java中获取List集合中最大的日期时间操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
  • php 获取用户IP与IE信息程序

    php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
  • php获取一个文件夹的mtime的程序

    php获取一个文件夹的mtime的程序了,这个就是时间问题了,对于这个问题我们来看小编整理的几个例子,具体的操作例子如下所示。 php很容易获取到一个文件夹的mtime,可以...2016-11-25
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • 教你怎么用Java获取国家法定节假日

    这篇文章主要介绍了教你怎么用Java获取国家法定节假日,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-04-23
  • 如何获取网站icon有哪些可行的方法

    获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon,所以此方法很多情况都不可用。 更好的办法是通过google提供的服务来实现:http://www.google.com/s2/favi...2014-06-07
  • mysql中获取一天、一周、一月时间数据的各种sql语句写法

    创建表:复制代码 代码如下:create table if not exists t( id int, addTime datetime default '0000-00-00 00:00:00′)添加两条初始数据:insert t values(1, '2012-07-12 21:00:00′);insert t values(2, '2012-07...2014-05-31
  • .NET/C# 使用Stopwatch测量运行时间

    这篇文章主要介绍了.NET/C# 使用Stopwatch测量运行时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • jquery如何获取元素的滚动条高度等实现代码

    主要功能:获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 :$(window).width(); 获取页面的文档高度 $(document).height(); 获取页面的文档宽度 :$(document).width();...2015-10-21
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • Android模拟器上模拟来电和短信配置

    如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
  • jquery获取div距离窗口和父级dv的距离示例

    jquery中jquery.offset().top / left用于获取div距离窗口的距离,jquery.position().top / left 用于获取距离父级div的距离(必须是绝对定位的div)。 (1)先介绍jquery.offset().top / left css: 复制代码 代码如下: *{ mar...2013-10-13
  • 夜神android模拟器设置代理的方法

    夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
  • Jquery 获取指定标签的对象及属性的设置与移除

    1、先讲讲JQuery的概念,JQuery首先是由一个 America 的叫什么 John Resig的人创建的,后来又很多的JS高手也加入了这个团队。其实 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用简单的一些代...2014-05-31
  • Android WebView加载html5页面实例教程

    如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
  • 深入理解Android中View和ViewGroup

    深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
  • Android自定义WebView网络视频播放控件例子

    下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
  • Android用MemoryFile文件类读写进行性能优化

    java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20