有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

下面的代码应该枚举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.安卓.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) 个答案

  1. # 1 楼答案

    我尝试使用你的代码查看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); 
            }
        }
        }
    
  2. # 2 楼答案

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

    This Page说明如何遍历文件树

    你也可以做谷歌搜索,但我发现甲骨文的官方页面更有用

    我发现This Page更有用。本页讨论的是PathMatcher,它不适用于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"),然后根据需要修改代码