如何从sd卡以编程方式显示.apk文件的用户列表?

时间:2012-01-05 08:36:50

标签: java android

以下代码应枚举apk文件列表,但由于某种原因,它不会。我试图以编程方式获取.apk文件列表,我可以从该列表中选择一个.apk文件,我可以选择安装。可能吗?

public class InstallAPKActivity extends Activity {
/** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ExtFilter apkFilter = new ExtFilter("apk");
    File file[] = Environment.getExternalStorageDirectory().listFiles(apkFilter);
    Log.d("InstallApk", "Filter applied. Size: "+ file.length);

    for (int i=0; i < file.length; i++)
    {
        Log.d("InstallApk", "FileName:" + file[i].getName());
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(file[i]),   
"application/vnd.android.package-archive");
        startActivity(intent);
    }
}

class ExtFilter implements FilenameFilter { 
    String ext; 
    public ExtFilter(String ext) { 
        this.ext = "." + ext; 
    } 
    public boolean accept(File dir, String name) { 
        return name.endsWith(ext); 
    }
}
}

2 个答案:

答案 0 :(得分:1)

嗯,你必须递归地进行搜索。您正在做的是仅列出父目录中的文件。

This Page解释了如何遍历文件树。

您也可以进行Google搜索,但我发现Oracle的官方网页更有用。

我发现This Page更有用。此页面介绍了适用于Android的PathMatcher

只有使用PathMatcher类的地方才是:

 void find(Path file) {
            Path name = file.getFileName();
            if (name != null && matcher.matches(name)) {
                numMatches++;
                System.out.println(file);
            }
        }

在这种情况下,您可以将matcher.mathces(name)替换为file.getName().endsWith(".apk"),然后根据需要修改代码。

答案 1 :(得分:0)

我试过你的代码来查看apk文件列表。我能够获取apk文件列表

以下代码显示了SD卡中的apk文件列表

import java.io.File;
import java.io.FilenameFilter;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;

public class MyListView extends Activity {




   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ExtFilter apkFilter = new ExtFilter("apk");
        File file[] = Environment.getExternalStorageDirectory().listFiles(apkFilter);

        Log.i("InstallApk","Filter applied. Size: "+ file.length);

        for (int i=0; i < file.length; i++)
        {
            Log.i("InstallApk", "FileName:" + file[i].getName());

        }



   }



    class ExtFilter implements FilenameFilter { 
        String ext; 
        public ExtFilter(String ext) { 
            this.ext = "." + ext; 
        } 
        public boolean accept(File dir, String name) { 
            return name.endsWith(ext); 
        }
    }
    }