获取sdcard上的所有apk
package com.shishixun.installapk;
import java.io.file;<br>import java.io.filefilter;<br>import java.util.arraylist;
import android.app.activity;<br>import android.content.pm.packageinfo;<br>import android.content.pm.packagemanager;<br>import android.graphics.drawable.drawable;<br>import android.os.bundle;<br>import android.text.format.formatter;<br>import android.util.log;
public class mainactivity extends activity {<br>??? /** called when the activity is first created. */<br>??? @override<br>??? public void oncreate(bundle savedinstancestate) {<br>??????? super.oncreate(savedinstancestate);<br>??????? setcontentview(r.layout.main);<br>??????? final file appfolder = new file( "/sdcard" );<br>??? ?arraylist<file> files = getfiles( appfolder,<br>????true );<br>??? ?packagemanager pm = getpackagemanager( );<br>??? ?for ( int i = 0, size = files.size( ); i < size; i++ )<br>??{<br>???file f = files.get( i );<br>???packageinfo pi= pm.getpackagearchiveinfo( f.getabsolutepath( ), 0 );<br>???if ( pi != null )<br>???{<br>????apkinfo holder = new apkinfo( );<br>????holder.file = f;<br>????holder.pkgname = pi.packagename;<br>????holder.size = f.length( );<br>????holder.sizestring = formatter.formatfilesize( mainactivity.this,<br>??????holder.size );<br>????holder.version = pi.versionname == null ? string.valueof( pi.versioncode )<br>??????: pi.versionname;<br>????system.out.println("file="+f+"pkgname="+holder.pkgname +"size"+holder.sizestring+"version"+holder.version? );<br>???}<br>??}
??? }<br>??? <br>??? <br>??? arraylist<file> getfiles( file parent, final boolean recursive )<br>?{<br>??final arraylist<file> files = new arraylist<file>( );
??filefilter filter = new filefilter( ) {
???public boolean accept( file f )<br>???{<br>????if ( f.isfile( )<br>??????&& f.getname( ).tolowercase( ).endswith( ".apk" ) )
????{<br>?????files.add( f );<br>????}<br>????else if ( recursive && f.isdirectory( ) )<br>????{<br>?????try<br>?????{<br>??????// try skip links<br>??????if ( f.getabsolutepath( )<br>????????.equals( f.getcanonicalpath( ) ) )<br>??????{<br>???????f.listfiles( this );<br>??????}<br>?????}<br>?????catch ( exception e )<br>?????{<br>??????log.e( mainactivity.class.getname( ),<br>????????e.getlocalizedmessage( ),<br>????????e );<br>?????}<br>????}<br>????return false;<br>???}<br>??};
??parent.listfiles( filter );
??return files;<br>?}<br>??? <br>??? <br>??? /**<br>? * apkinfo<br>? */<br>?private static final class apkinfo<br>?{
??file file;<br>??charsequence label;<br>??string pkgname;<br>??string version;<br>??string sizestring;<br>??long size;<br>??drawable icon;<br>??int installed;<br>??boolean checked;
??apkinfo( )<br>??{
??}<br>?}<br>}