Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中将Ormlite数据库文件附加到电子邮件意图_Android_Sqlite_Email_Android Intent_Ormlite - Fatal编程技术网

如何在Android中将Ormlite数据库文件附加到电子邮件意图

如何在Android中将Ormlite数据库文件附加到电子邮件意图,android,sqlite,email,android-intent,ormlite,Android,Sqlite,Email,Android Intent,Ormlite,我正在维护一个遗留的Android应用程序,它使用OrmLiteSqliteOpenHelper在设备上创建Sqlite数据库。在设备上,我发现此文件位于: /data/data/[package name]/databases/mydatabase.db 我的应用程序有一个“电子邮件支持”功能,不幸的是,我的任务是将这个SQLite文件附加到一个用于解决用户问题的电子邮件中。我遇到了一些权限问题。以下是我正在使用的代码: public void email(String[] to, Strin

我正在维护一个遗留的Android应用程序,它使用OrmLiteSqliteOpenHelper在设备上创建Sqlite数据库。在设备上,我发现此文件位于:

/data/data/[package name]/databases/mydatabase.db

我的应用程序有一个“电子邮件支持”功能,不幸的是,我的任务是将这个SQLite文件附加到一个用于解决用户问题的电子邮件中。我遇到了一些权限问题。以下是我正在使用的代码:

public void email(String[] to, String subject ) {
    Intent email    = new Intent(Intent.ACTION_SEND);
    email.setType("*/*");
    email.putExtra(android.content.Intent.EXTRA_EMAIL, to);
    email.putExtra(android.content.Intent.EXTRA_SUBJECT, subject );

    File file = activity.get().getApplicationContext().getDatabasePath("mydatabase.db");

    if( file.exists() )  
    {
         if( file.canRead() )
        {
            Uri uri = Uri.fromFile(file);
            email.putExtra(Intent.EXTRA_STREAM, uri);
            activity.get().startActivity(Intent.createChooser(email, "Email DB File"));
        }
    }
}
当我运行此代码并选择“Gmail”作为我的邮件客户端时,我会在电子邮件客户端上得到一个祝酒词,上面写着“附件权限被拒绝”


为什么会发生这种情况?如何授予Gmail此文件的权限?感谢您的帮助。谢谢。

我已经找到了解决方法,但我仍然愿意接受其他解决方案

如果我使用Environment.getExternalStorageDirectory()在SD卡上创建该文件的临时副本,Gmail客户端有权读取该文件。邮件客户端似乎只有访问内部存储的权限问题

 File file = activity.get().getApplicationContext().getDatabasePath("mydatabase.db");

    if( file.exists() && file.canRead() )
    {
        try {

           //We need to make a local copy of the file to SDCard, so Gmail can use it
            File destination = new File(Environment.getExternalStorageDirectory(), "database_copy.db");
            this.copy(file, destination);

            //Attach file and send
            Uri uri = Uri.fromFile(destination);
            email.putExtra(Intent.EXTRA_STREAM, uri);
            activity.get().startActivity(Intent.createChooser(email, "Email DB File"));
        }
        catch(IOException ioe){
            return;
        }
    }

....

//File copy routine
 private void copy(File src, File dst) throws IOException {
    InputStream in = new FileInputStream(src);
    OutputStream out = new FileOutputStream(dst);

    byte[] buf = new byte[1024];
    int len;
    while ((len = in.read(buf)) > 0) {
        out.write(buf, 0, len);
    }
    in.close();
    out.close();
}