1

混乱: 質問に反対票を投じた人は、コメントを追加してもらえますか? なぜ???? 悪い言葉を言いたいのですが、禁止されたくないだけです。

私はアプリを持っていますが、ユーザーが何かを追加してアプリ内で使用できるように、sdCard にフォルダーを作成したいと考えています。次のコードを使用してフォルダーを作成します。

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //External storage
        boolean mExternalStorageAvailable = false;
        boolean mExternalStorageWriteable = false;
        String state = Environment.getExternalStorageState();

        if (Environment.MEDIA_MOUNTED.equals(state)) {
            // We can read and write the media
            mExternalStorageAvailable = mExternalStorageWriteable = true;
            Log.v("Storage","ablo to read and write");
            //create Beatss folder
            File direct = new File(android.os.Environment.getExternalStorageDirectory().getPath() + "/Beatss");
            Log.v("Storage",android.os.Environment.getExternalStorageDirectory().getPath() + "/Beatss");
                boolean success = true;
                if (!direct.exists()) {
                    success = direct.mkdirs();

                }
                if (success) {
                    // Do something on success
                    Log.v("Storage","Folder has been created");

                } else {
                    // Do something else on failure 

                }

        } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
            // We can only read the media
            mExternalStorageAvailable = true;
            mExternalStorageWriteable = false;
            Log.v("Storage","ablo to read only");
        } else {

            mExternalStorageAvailable = mExternalStorageWriteable = false;
            Log.v("Storage","no access");               
        }

DDMS でフォ​​ルダーが作成されたことを確認できますが、WindowsExplorer を使用すると、フォルダーではなくファイルが表示されます。では、フォルダを作成する方法は?

UPD1: したがって、このフォルダー内に何かを作成しても、Windows エクスプローラー内にファイルとして保持されますが、DDMS 内にはフォルダーがあり、その中に別のフォルダーがあることがわかります。それで、ここで何が問題なのですか??

UPD2:したがって、logcatdirectの行を分割して、実際のパスがあるかどうかを確認します。

01-24 21:14:04.368: V/Storage(12116): /mnt/sdcard/Beatss/

だからある..

UPD3: これまでに 264 行あるすべてのコードを表示することはできません。このフォルダの作成はすべて、mainActivity の onCreate で行われます。manifestFile は次のようになります。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="uk.test
android:versionCode="1"
android:versionName="1.0"
android:installLocation="auto" >

<uses-sdk
    android:minSdkVersion="7"
    android:targetSdkVersion="16" />
<supports-screens         
              android:smallScreens= "true"
              android:normalScreens="true"
              android:largeScreens="true"
              android:xlargeScreens="false"                  
/>


    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:screenOrientation="portrait"
    >
    <activity
        android:name=".Main"
        android:label="@string/app_name"
        android:screenOrientation="portrait" 
        android:clearTaskOnLaunch="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="com.google.ads.AdActivity"
              android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>        
    <activity android:name=".MainActivity"
              android:label="@string/app_name"
              android:screenOrientation="portrait">
    </activity>
    <activity android:name=".SupportScreen"
              android:label="@string/app_name"
              android:screenOrientation="portrait">
    </activity>
        <activity android:name="com.tapjoy.TJCOffersWebView" android:configChanges="keyboardHidden|orientation" />
        <activity android:name="com.tapjoy.TapjoyFullScreenAdWebView" android:configChanges="keyboardHidden|orientation" />
        <activity android:name="com.tapjoy.TapjoyDailyRewardAdWebView" android:configChanges="keyboardHidden|orientation" />
        <activity android:name="com.tapjoy.TapjoyVideoView" android:configChanges="keyboardHidden|orientation" />

</application>
</manifest>

更新コード上部:

Logcat は次のように述べています。

01-24 21:19:21.068: V/Storage(14088): /mnt/sdcard/Beatss/
01-24 21:19:21.138: V/Storage(14088): Folder has been created
4

4 に答える 4

2

それを試してみてください

String PATH = Environment.getExternalStorageDirectory()+"/Folder123/";
            File file = new File(PATH);
            file.mkdirs();
于 2013-01-24T16:47:27.063 に答える
0

これは、私が本番環境にあるアプリのコードスニペットです....

if (spaceAvailable > spaceRequired) {
        databasePath = new File(settingsDatabasePath, GC.APP_DIRECTORY);
        databasePath.mkdirs();
        settingsDatabasePath = databasePath.getPath().toString();
    }

settingsDatabasePath は、アプリが最初にインストールされたときに決定されます。デバイスに外部ストレージがあるかどうかに応じて、外部ストレージまたは内部ストレージのいずれかになります。また、このスニペットの前に、GC.APP_DIRECTORY (GC クラスの文字列定数) がまだ作成されていないことが確認されています。また、このスニペットの後、ディレクトリが作成されていること、書き込み可能であること、およびディレクトリであることを確認するためのテストが行​​われます。データベースとファイルはアプリ ディレクトリに作成され、ルート レベル ディレクトリにファイルが飛び散るのを防ぎます。

注: settingsDatabasePath は意図的に上書きされています。コードをコピーする場合、上書きをしたくない場合があります。

于 2013-01-24T21:39:17.063 に答える
0

コードに問題はありません。私はすべてのアプリでこの同じコードを使用していますが、問題なく動作します。コードをコピーして貼り付けましたが、うまく機能します。「Beatss」フォルダは、私の Windows マシンで表示できます。SDカードに問題があるに違いありません。エラーがないか確認するか、別の SD カードを試す必要があります。

Windows では、SD カードを右クリックし、[プロパティ] > [ツール] > [エラー チェック] を選択して、[今すぐチェック] をクリックします。エラーがない場合は、別のカードを試してください。そうでない場合は、別のデバイスで apk を試してみて、そこで動作するかどうかを確認してください。

于 2013-01-31T14:36:10.527 に答える
0

これを試して :

String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
    File folder = new File(extStorageDirectory, "DIR_NAME");
    folder.mkdir();
    File file = new File(folder, "Sample.txt");
    try {
        file.createNewFile();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
于 2013-01-30T10:18:54.300 に答える