以下代码应枚举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);
}
}
}
答案 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);
}
}
}