Java 如何从sd卡以编程方式显示.apk文件的用户列表?
下面的代码应该枚举apk文件列表,但由于某些原因,它没有枚举。我试图以编程方式获取.apk文件列表,以便从该列表中选择一个.apk文件进行安装。可能吗Java 如何从sd卡以编程方式显示.apk文件的用户列表?,java,android,Java,Android,下面的代码应该枚举apk文件列表,但由于某些原因,它没有枚举。我试图以编程方式获取.apk文件列表,以便从该列表中选择一个.apk文件进行安装。可能吗 public class InstallAPKActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.o
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);
}
}
}
公共类InstallapkaActivity扩展活动{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ExtFilter apkFilter=新的ExtFilter(“apk”);
文件文件[]=Environment.getExternalStorageDirectory().listFiles(apkFilter);
Log.d(“InstallApk”,“Filter applied.Size:+file.length”);
for(int i=0;i
我尝试使用您的代码查看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);
}
}
}
导入java.io.File;
导入java.io.FilenameFilter;
导入android.app.Activity;
导入android.os.Bundle;
导入android.os.Environment;
导入android.util.Log;
公共类MyListView扩展活动{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ExtFilter apkFilter=新的ExtFilter(“apk”);
文件文件[]=Environment.getExternalStorageDirectory().listFiles(apkFilter);
Log.i(“InstallApk”,“Filter applied.Size:+file.length”);
for(int i=0;i
嗯,您必须递归地进行搜索。您所做的只是列出父目录中的文件
说明如何遍历文件树
你也可以做谷歌搜索,但我发现甲骨文的官方页面更有用
我发现它更有用。本页讨论的是Android无法使用的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”)
然后随意修改代码。我使用了这段代码,效果很好。@Manikandan:hey it’s给我一个错误,比如:错误由:java.lang.ClassNotFoundException:com.a.android.getapkaActivity in loader dalvik.system.PathClassLoader[/data/app/com.a.android-1.apk]引起,它只列出父目录中的文件。也就是说,它只列出/mnt/sdcard/上的文件,而不列出/mnt/sdcard/downloads/或/mnt/sdcard/otherDirectories/中的文件。不幸的是,这需要导入java.nio。(*),它似乎不是Android的一部分。