Android系统应用程序无法创建目录

Android系统应用程序无法创建目录,android,android-sdcard,android-external-storage,Android,Android Sdcard,Android External Storage,我正在开发一个android应用程序。在其中一个模块中,我正在使用下面的代码在外部存储器中创建一个目录来存储文件。一切正常,我能够创建目录 public class Main extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

我正在开发一个android应用程序。在其中一个模块中,我正在使用下面的代码在外部存储器中创建一个目录来存储文件。一切正常,我能够创建目录

    public class Main extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            Button btnCreateDir = (Button) findViewById(R.id.createDir);
            btnCreateDir.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    try {
                        File pictureFileDir = getDir();

                        if (!pictureFileDir.exists() && !pictureFileDir.mkdirs()) {
                            Toast.makeText(getApplicationContext(),"Can't create directory",Toast.LENGTH_LONG).show();
                        } else {
                            Toast.makeText(getApplicationContext(),"directory created/exists",Toast.LENGTH_LONG).show();
                        }
                    } catch (Exception e4) {
                        e4.printStackTrace();
                    }
                }
            });
        }   
        private File getDir() {
            File sdDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
            return new File(sdDir, "GaPopupFile");
        }
    }   

然而,当我通过使用系统证书签名并将其存储在system/app文件夹中使此应用程序成为系统应用程序时,我发现在执行相同的代码时,返回“无法创建目录”。这怎么可能,我在这里缺少什么?

您是否已将此权限添加到AndroidManifest.xml文件中

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在Android应用程序中读取文件所需的读取权限。
在Android应用程序中写入文件所需的写入权限。

您可能希望记录在正常和系统应用程序中尝试的实际路径。@ChrisStratton:我做了您建议的测试用例。以下是我的结论。在安装系统应用程序时,当我从清单中删除“Android:sharedUserId=Android.uid.system”时,我看到我能够创建目录,就像我在应用程序作为用户应用程序安装时一样。原因可能是什么?是否我所谓的“系统应用程序”实际上没有作为系统应用程序真正安装?可能没有合适的外部存储目录可供帮助:system-iirc历史上,用户甚至被禁止触摸外部存储,因为任何文件句柄打开到SD卡的进程最初用于实现它如果SD卡被卸载,将立即被杀死。是的,我拥有这两个权限。我根据上面的评论解决了这个问题。