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

时间:2023-02-09 19:01:13

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