ListView listView = getListView();
//添加到脚页显示 这个要继承ListActivity 实现OnScrollListener
listView.addFooterView(loadingLayout);
public class ListViewUpdate extends Activity implements OnScrollListener,
OnItemClickListener {
private List<ApplicationItemInfo> applicationItemInfoList;
private List<ApplicationItemInfo> applicationItemInfoListTemp;
private ApplicationItemAdapter applicationItemAdapter;
private ListView listView;
private LinearLayout loading;
private Handler handler;
private boolean refreshable;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
updateApplicationItemInfoList();
}
private void init() {
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.list);
loading = (LinearLayout) findViewById(R.id.loading);
applicationItemInfoList = new ArrayList<ApplicationItemInfo>();
applicationItemAdapter = new ApplicationItemAdapter(this,
applicationItemInfoList);
handler = createHandler();
refreshable = true;
listView.setAdapter(applicationItemAdapter);
listView.setOnItemClickListener(this);
listView.setOnScrollListener(this);
}
private Handler createHandler() {
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what) {
case 1:
if (applicationItemInfoListTemp != null) {
ListViewUpdate.this.applicationItemInfoList
.addAll(applicationItemInfoListTemp);
ListViewUpdate.this.applicationItemAdapter
.notifyDataSetChanged();
ListViewUpdate.this.loading
.setVisibility(View.GONE);
ListViewUpdate.this.refreshable = true;
} else {
ListViewUpdate.this.loading
.setVisibility(View.GONE);
Toast.makeText(ListViewUpdate.this,
"All of applications have been shown!",
Toast.LENGTH_LONG).show();
}
break;
default:
break;
}
}
};
return handler;
}
public Handler getHandler() {
return handler;
}
private void updateApplicationItemInfoList() {
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if (ListViewUpdate.this.applicationItemInfoList.size() < 80) {
ListViewUpdate.this.applicationItemInfoListTemp = ListViewUpdate.this
.getLocalApplicationInfo();
} else {
ListViewUpdate.this.applicationItemInfoListTemp = null;
}
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Message message = new Message();
message.what = 1;
ListViewUpdate.this.getHandler().sendMessage(message);
}
}).start();
}
private ArrayList<ApplicationItemInfo> getLocalApplicationInfo() {
PackageManager packageManager = this.getPackageManager();
ArrayList<ApplicationItemInfo> applicationItemInfoList = new ArrayList<ApplicationItemInfo>();
List<PackageInfo> packageInfoList = packageManager
.getInstalledPackages(0);
for (int i = packageInfoList.size(); i > 0; i--) {
ApplicationInfo applicationInfo = packageInfoList.get(i - 1).applicationInfo;
if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {
try {
ApplicationItemInfo applicationItemInfo = new ApplicationItemInfo();
String packageName = packageInfoList.get(i - 1).packageName;
String[] permissions = packageManager.getPackageInfo(
packageName, PackageManager.GET_PERMISSIONS).requestedPermissions;
applicationItemInfo.setPackageName(packageName);
applicationItemInfo.setPermissions(permissions);
applicationItemInfo.setIcon(packageManager
.getApplicationIcon(applicationInfo));
applicationItemInfo.setName(packageManager
.getApplicationLabel(applicationInfo).toString());
applicationItemInfoList.add(applicationItemInfo);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
}
}
}
if ((!applicationItemInfoList.isEmpty())
&& (applicationItemInfoList.size() < 10)) {
for (int i = applicationItemInfoList.size(); i < 10; i++) {
applicationItemInfoList.add(applicationItemInfoList.get(9 - i));
}
}
return applicationItemInfoList;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
if ((firstVisibleItem + visibleItemCount == totalItemCount)
&& (totalItemCount != 0)) {
if (refreshable) {
refreshable = false;
loading.setVisibility(View.VISIBLE);
updateApplicationItemInfoList();
}
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
@Override
public void onItemClick(AdapterView<?> arg0, View view, int position,
long id) {
// TODO Auto-generated method stub
AlertDialog.Builder permissionDialog = new AlertDialog.Builder(this);
permissionDialog.setIcon(applicationItemInfoList.get(position)
.getIcon());
permissionDialog.setTitle(applicationItemInfoList.get(position)
.getName());
String[] permissions = applicationItemInfoList.get(position)
.getPermissions();
StringBuffer temp = new StringBuffer();
if (permissions != null) {
for (int i = 0; i < permissions.length; i++) {
temp.append(permissions[i]);
temp.append("\n");
}
} else {
temp.append("permission is null");
}
permissionDialog.setMessage(temp.toString());
permissionDialog.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.cancel();
}
});
permissionDialog.create().show();
}
}