Android App在虚拟设备上运行,但在真实设备上运行

时间:2012-10-27 05:03:20

标签: android eclipse

我正在尝试开发一个Android应用程序,但我真的没有太多的经验。 App会读取姓名和电话号码等所有联系信息,并将数据写入存储在内部存储器中的XML文件中。 从Android 4.1到Android 2.2的虚拟设备上一切正常。我正在使用eclipse。 但现在我想在真实设备上进行测试。首先我将它安装在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”。

1 个答案:

答案 0 :(得分: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">

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