您的位置:首页 > 移动开发 > Android开发

Android 怎样获得手机信息(四)

2011-04-27 15:16 555 查看
1.2.4 查看软件信息

  在Android上,可以在手机上随便安装自己喜欢的应用软件,查看软件信息的功能就是收集并显示已经安装的应用软件信息。Android 提供了getPackageManager()、getInstalledApplications(0)方法,可以直接返回全部已经安装的应用列表。这个功能就是只需要获取列表,再进行显示在列表中就可以了。但是,如果安装的软件比较多,那么获取信息所花费的时间会比较多,为了更好地完善用户使用的体验,在获取列表时,需要在界面提示用户耐心等待,这就需要用到Android提供的另外一个功能Runnable。

  引入Runnable比较简单,只需要在定义类的时候实现Runnable接口就可以了,所以,这里的软件信息查看界面对应的Software.java类声明代码如下:

Java代码:

public class Software extends Activity implements Runnable {

}

然后需要在这个Activity启动的时候,引入进度条ProgressDialog来显示一个提示界面,onCreate代码如下所示:

Java代码:

public void onCreate(Bundle icicle) {

Super.onCreate(icicle);

setContentView(R.layout.softwares);

setTitle("软件信息");

itemlist = (ListView) findViewById(R.id.itemlist);

pd = ProgressDialog.show(this, "请稍候. .", "正在收集你已经安装的软件信息. . .", true, false);

Thread thread = new Thread(this);

thread.start();

}

该方法创建了一个ProgressDialog,并设定其提示信息。然后实现其线程的run()方法,该方法实现其真正执行的逻辑,实现代码如下:

Java代码:

@Override

Public void run() {

fetch_installed_apps();

handler.sendEmptyMessage(0);

}

上述代码调用自定义的fetch_installed_app()方法获取已经安装的应用信息,这个方法是比较消耗时间的,实现代码如下:

Java代码:

public ArrayList fetch_installed_apps () {

List< ApplicationInfo> packages = getPackageManager().getInstalledApplications(0);

ArrayList< HashMap< String, Object>> list = new ArrayList< HashMap< String, Object>>(packages.size());

Iterator< ApplicationInfo> l = packages.iterator();

while (l.hasNext()) {

HashMap< String, Object> map = new HashMap< String, Object>();

ApplicationInfo app = (ApplicationInfo) l.next();

String packageName = app.packageName;

String label = " ";

try {

label = getPackageManager().getApplicationLabel(app).toString();

} catch (Exception e) {

Log.i("Exception", e.toString()

);

}

map = new HashMap< String, Object>();

map.put("name", label);

map.put("desc", packageName);

list.add(map);

}

return list;

}

上述代码使用getPackageManager().getInstalledApplications(0)获取已经安装的软件信息,进而构造用来显示的列表(List)对象,同时,界面通过进度条(ProgressDialog)显示提示信息。

  当这个方法运行完成后,会调用handler.sendEmptyMessage(0)语句给handler发送一个通知消息,使其执行下面的动作,下面就是这个handler的实现方法:

Java代码:

private Handler handler = new Handler() {

public void handleMessage msg) {

refreshListItems();

pd.dismiss();

};

}

上述代码中,当其接收到run()线程传递的消失后,先调用refreshListItems()方法显示列表,最后调用进度条ProgressDialog的dismiss方法使其等待提示消失。而refreshListItems()的实现代码如下:

Java代码:

private void refreshListItems() {

list = fetch_installed_apps();

SimpleAdapter notes = new SimpleAdater(this, list, R.layout.info_row,new String[] {"name", "desc"},new int[] {R.id.name, R.id.desc});

list.setAdapter(notes);

setTitle("软件信息,已经安装" + list.size()+"款应用.");

}

这些代码,显示已经安装的应用列表的同时,在Title上显示一共安装了多少款应用.

http://www.eoeandroid.com/forum-viewthread-tid-71374-highlight-Android%2B%E6%80%8E%E6%A0%B7%E8%8E%B7%E5%BE%97%E6%89%8B%E6%9C%BA%E4%BF%A1%E6%81%AF.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: