链接错误 - 无写权限

时间:2017-11-13 22:05:13

标签: java android linker-errors

我在Android Studio中处理的项目有问题。目标是将基本字符串保存到.csv文件中,然后将该文件作为电子邮件附件附加。

我无法写入该文件,但我可以通过FileProvider.getUriForFile共享该文件。

我认为这个问题与我得到的这两个链接器错误消息有关,streamsavvy-1涉及bc我的包名是com.team6.rifflegroup.streamsavvy

11-13 16:20:39.775 10286-10286/com.team6.rifflegroup.streamsavvy E/linker: readlink('') failed: No such file or directory [fd=31]

11-13 16:20:39.775 10286-10286 / com.team6.rifflegroup.streamsavvy E / linker:警告:无法获取库的实际路径" /data/app/com.team6.rifflegroup。 streamsavvy-1 /燕麦/ arm64 / base.odex&#34 ;.将使用给定的名称。

我像这样构建文件

File dataPath = new File(this.getFilesDir(), "xml");
File newData = new File(dataPath, FILE_NAME);

我在res下的xml目录中有一个paths.xml文件,看起来像这个

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <files-path
        name="my_files"
        path="/"/>
</paths>

我的写函数看起来像这样

try {
        FileWriter writer = new FileWriter(newData);
        writer.append(csv);
        writer.flush();
        writer.close();
        Toast.makeText(this, "SAVED", Toast.LENGTH_SHORT).show();

    }catch (IOException e){
        e.printStackTrace();
    }

我的电子邮件意图如下所示

Uri contentUri = FileProvider.getUriForFile(this, "com.team6.rifflegroup.streamsavvy.FileProvider", newData);

    this.grantUriPermission(getPackageName(), contentUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

    Intent emailIntent = new Intent(Intent.ACTION_SEND);
    emailIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    emailIntent.setType("vnd.android.cursor.dir/email");
    emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"myEmail@gmail.com"});
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
    emailIntent.putExtra(Intent.EXTRA_TEXT, "File Attached");
    emailIntent.putExtra(Intent.EXTRA_STREAM, contentUri);

    startActivity(Intent.createChooser(emailIntent, "Send email..."));

我在我的清单中给予许可

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

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

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.team6.rifflegroup.streamsavvy.FileProvider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/paths"/>
    </provider>
</application>

我觉得这是java构建项目的方式的一个问题,但我对这个过程并不是很熟悉。任何帮助或指针将不胜感激。

这是我第一次在这里发帖,所以如果我的帖子不合时宜或格式不正确,我很抱歉。

1 个答案:

答案 0 :(得分:0)

为长篇帖子道歉。弄清楚了。

在指定文件后必须声明.mkdirs()调用(不是.mkdir())。