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

デバイスがルート化されている場合、実際のデバイスの内部ストレージにアクセスできます。エミュレーターでは、完全なルートアクセス権があるため、で見つけることができます/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 に答える