0

我正在尝试开发一个android应用程序,但我并没有太多经验。目前,该应用程序读取所有联系信息,如姓名和电话号码,并将数据写入存储在内部存储中的 XML 文件。从 Android 4.1 到 Android 2.2 的虚拟设备上一切正常。我正在使用日食。但现在我想在真实设备上测试它。首先,我将它安装在装有 Android 4.0 的智能手机上。我设法安装了该应用程序并启动它。该应用程序也写入了该文件,但它是空的。之后我将它安装在装有 Android 2.3 的智能手机上。它也开始了,但我找不到文件。我正在使用AndroXplorer访问内部存储。

由于我以前从未使用过 Android 应用程序,任何人都可以告诉我如何弄清楚为什么该应用程序在所有虚拟设备上运行而不是在真实设备上运行?

提前致谢!

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Create new file
    File newxmlfile = new File(this.getFilesDir(), "newcontacts3.xml");
    try {
        newxmlfile.createNewFile();
    } catch (IOException e) {
        Log.e("IOException", "Exception in create new File(");
    }
    FileOutputStream fileos = null;
    try {
        fileos = new FileOutputStream(newxmlfile);

    } catch (FileNotFoundException e) {
        Log.e("FileNotFoundException", e.toString());
    }
    XmlSerializer serializer = Xml.newSerializer();
    try {
        serializer.setOutput(fileos, "UTF-8");
        serializer.startDocument(null, Boolean.valueOf(true));
        serializer.setFeature(
                "http://xmlpull.org/v1/doc/features.html#indent-output",
                true);
        serializer.startTag(null, "root");

        ContentResolver cr = getContentResolver();
        Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,
                null, null, null, null);
        if (cursor.getCount() > 0) {
            while (cursor.moveToNext()) {

                String id = cursor.getString(cursor
                        .getColumnIndex(ContactsContract.Contacts._ID));

                serializer.startTag(null, "ContactID");
                serializer.attribute(null, "ID", id);

                // GET ALL THE CONTACT DATA AND WRITE IT IN THE FILE

                serializer.endTag(null, "ContactID");
            }
        }
        cursor.close();

        serializer.endTag(null, "root");
        serializer.endDocument();
        serializer.flush();
        fileos.close();

    } catch (Exception e) {
        Log.e("Exception", "Exception occured in wroting");
    }

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

}

我的 minSDKVersion 是 8,目标版本是 15。我已经添加了互联网权限和读取联系人的权限。

当我在虚拟设备上运行它时,应用程序启动,我的开始屏幕出现并在 data/data/com.examples.anotherproject/files 下创建文件“newcontacs3.xml”。

4

1 回答 1

0

如果您的设备已植根,则可以访问真实设备上的内部存储。在模拟器上,您拥有完全的 root 访问权限,因此您可以在/data/data/com.your.package/files/. 但是在无根的真实设备上,您没有全部权限。

代替:

File newxmlfile = new File(this.getFilesDir(), "newcontacts3.xml");

和:

File newxmlfile = new File(Environment.getExternalStorageDirectory().getpath(), "newcontacts3.xml");

并为您的清单添加权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">

您将在已安装的存储根目录中找到您的文件。

于 2013-06-07T15:42:56.990 回答