一点关于sd卡读写权限的问题,求大佬帮忙

qq_37733371 2018-04-10 12:00:12
我知道安卓6.0之后要对SD卡进行读写操作要权限,我现在不仅在xml中添加了那两条,也用静态类动态申请了,但就是无法在SD卡中新建文件夹,很痛苦,求大佬解答一下
...全文
643 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_37733371 2018-04-11
  • 打赏
  • 举报
回复
引用 10 楼 dalor 的回复:
你再创建的代码上来,我看看。
感谢大佬了,我加了你发的那几天权限在xml之后还是不能无法创建成,我不能确定是不是因为android studio的虚拟机不支持SD卡的读写操作,所以现在我直接把assets中的文件拷贝到机身内存中,直接成功了已经,非常感谢大佬的帮助 下一个回复我会把修改之后的代码贴出来
qq_37733371 2018-04-11
  • 打赏
  • 举报
回复
public SQLiteDatabase getDatabase(String dbfile) {
        if(databases.get(dbfile) != null){
            Log.i(tag, String.format("Return a database copy of %s", dbfile));
            return (SQLiteDatabase) databases.get(dbfile);
        }
        if(context==null)
            return null;

        Log.i(tag, String.format("Create database %s", dbfile));
        String spath = getDatabaseFilepath();
        String sfile = getDatabaseFile(dbfile);

        File file = new File(context.getFilesDir(), sfile);
        File file1 = new File(spath);
        if(file1.mkdirs())
            Log.i("mkdir","success");
        if(file.exists())
            Log.i("db", "数据库文件找到了");
        SharedPreferences dbs = context.getSharedPreferences(AssetsDatabaseManager.class.toString(), 0);
        boolean flag = dbs.getBoolean(dbfile, false); // Get Database file flag, if true means this database file was copied and valid
        if(!flag || !file.exists()){
            file = new File(context.getFilesDir(),spath);
            if(!file.exists() && !file.mkdirs()){
                Log.i(tag, "Create \""+spath+"\" fail!");
                return null;
            }
            if(!copyAssetsToFilesystem(dbfile, context.getFilesDir()+sfile)){
                Log.i(tag, String.format("Copy %s to %s fail!", dbfile, sfile));
                return null;
            }

            dbs.edit().putBoolean(dbfile, true).commit();
        }

        SQLiteDatabase db = SQLiteDatabase.openDatabase(context.getFilesDir()+sfile, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
        if(db != null){
            databases.put(dbfile, db);
        }
        return db;
    }
usecf 2018-04-11
  • 打赏
  • 举报
回复
1.把手机连接到电脑上 2.打开手机上的debug调试模式 3.确保你adb可以使用,不能用的话,配置下adb环境变量 4. 在cmd窗口中 输入 d:\ 回车 切换到d盘 adb logcat > sdcard.log 5.然后在你d盘找sdcard.log文件
开发者_android 2018-04-11
  • 打赏
  • 举报
回复
引用 3 楼 xj396282771 的回复:
代码 File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/myFile"); if (!file.exists()) { file.mkdirs(); } 权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 新建文件夹不至于这么恼火啊
一个目录,用dir.mkdir(); 这个也没什么其它高级的东西呀,我这边写了例子,成功了。
开发者_android 2018-04-11
  • 打赏
  • 举报
回复

你再创建的代码上来,我看看。
qq_37733371 2018-04-11
  • 打赏
  • 举报
回复
引用 4 楼 usecf 的回复:
抓log看看是权限问题还是路径问题
Log我现在只会很简单的那种运行到哪一步然后执行看看运行到哪里,你说这种不会 求大佬教一下 非常感谢
qq_37733371 2018-04-11
  • 打赏
  • 举报
回复
引用 2 楼 dalor 的回复:
1.权限加完整。 2.权限加<application>标签前面。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.zzh.testmenu"
    android:versionCode="1"
    android:versionName="1.0">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".YearLineActivity">
            <intent-filter>
                <action android:name="android.intent.action.YEARLINE"/>

                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
    </application>

</manifest>
qq_37733371 2018-04-11
  • 打赏
  • 举报
回复
引用 1 楼 dalor 的回复:
上代码,MOUNT_UNMOUNT_FILESYSTEMS权限加没
public class PermisionUtils {
    // Storage Permissions
    private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSIONS_STORAGE = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE};

    /**
     * Checks if the app has permission to write to device storage
     * If the app does not has permission then the user will be prompted to
     * grant permissions
     *
     * @param activity
     */
    public static void verifyStoragePermissions(Activity activity) {
        // Check if we have write permission
        int permission = ActivityCompat.checkSelfPermission(activity,
                Manifest.permission.WRITE_EXTERNAL_STORAGE);

        if (permission != PackageManager.PERMISSION_GRANTED) {
            // We don't have permission so prompt the user
            ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,
                    REQUEST_EXTERNAL_STORAGE);
        }
    }
}
我用的是这种动态加入
别介意 2018-04-10
  • 打赏
  • 举报
回复
基本可以确定是你路径问题,你在csdn下载一个demo然后对比着操作
usecf 2018-04-10
  • 打赏
  • 举报
回复
抓log看看是权限问题还是路径问题
Jing丶無雙 2018-04-10
  • 打赏
  • 举报
回复
代码 File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/myFile"); if (!file.exists()) { file.mkdirs(); } 权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 新建文件夹不至于这么恼火啊
开发者_android 2018-04-10
  • 打赏
  • 举报
回复
1.权限加完整。 2.权限加<application>标签前面。
开发者_android 2018-04-10
  • 打赏
  • 举报
回复
上代码,MOUNT_UNMOUNT_FILESYSTEMS权限加没

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧