相关疑难解决方法(0)

从内部存储创建和共享文件

我的目标是在内部存储上创建XML文件,然后通过共享Intent发送它.

我可以使用此代码创建XML文件

FileOutputStream outputStream = context.openFileOutput(fileName, Context.MODE_WORLD_READABLE);
PrintStream printStream = new PrintStream(outputStream);
String xml = this.writeXml(); // get XML here
printStream.println(xml);
printStream.close();
Run Code Online (Sandbox Code Playgroud)

我试图将Uri检索到输出文件以便共享它.我首先尝试通过将文件转换为Uri来访问该文件

File outFile = context.getFileStreamPath(fileName);
return Uri.fromFile(outFile);
Run Code Online (Sandbox Code Playgroud)

这将返回file:///data/data/com.my.package/files/myfile.xml但我似乎无法将其附加到电子邮件,上传等.

如果我手动检查文件长度,它是正确的,并显示有一个合理的文件大小.

接下来,我创建了一个内容提供程序并尝试引用该文件,它不是该文件的有效句柄.在ContentProvider没有以往任何时候都似乎被称为任意点.

Uri uri = Uri.parse("content://" + CachedFileProvider.AUTHORITY + "/" + fileName);
return uri;
Run Code Online (Sandbox Code Playgroud)

这将返回内容://com.my.package.provider/myfile.xml但我检查文件并且它的长度为零.

如何正确访问文件?我是否需要使用内容提供商创建文件?如果是这样,怎么样?

更新

这是我用来分享的代码.如果我选择Gmail,它会显示为附件,但是当我发送它时会出现错误无法显示附件,并且到达的电子邮件没有附件.

public void onClick(View view) {
    Log.d(TAG, "onClick " + view.getId());

    switch (view.getId()) {
        case R.id.share_cancel:
            setResult(RESULT_CANCELED, getIntent());
            finish();
            break;

        case R.id.share_share:

            MyXml …
Run Code Online (Sandbox Code Playgroud)

android android-contentprovider android-file

41
推荐指数
3
解决办法
4万
查看次数

Gmail 5.0应用在收到ACTION_SEND意图时失败并显示"附件权限被拒绝"

我的应用程序创建带附件的邮件,并使用意图Intent.ACTION_SEND来启动邮件应用程序.

它适用于我测试过的所有邮件应用,除了新的Gmail 5.0(适用于Gmail 4.9),邮件打开时没有附件,显示错误:"附件权限被拒绝".

在logcat上没有来自Gmail的有用消息.我只测试了Android KitKat上的Gmail 5.0,但是在多个设备上.

我为附件创建了这样的文件:

String fileName = "file-name_something_like_this";
FileOutputStream output = context.openFileOutput(
        fileName, Context.MODE_WORLD_READABLE);

// Write data to output...

output.close();
File fileToSend = new File(context.getFilesDir(), fileName);
Run Code Online (Sandbox Code Playgroud)

我知道安全问题MODE_WORLD_READABLE.

我发送这样的意图:

public static void compose(
        Context context,
        String address,
        String subject,
        String body,
        File attachment) {

    Intent emailIntent = new Intent(Intent.ACTION_SEND);
    emailIntent.setType("message/rfc822");
    emailIntent.putExtra(
            Intent.EXTRA_EMAIL, new String[] { address });
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
    emailIntent.putExtra(Intent.EXTRA_TEXT, body);

    emailIntent.putExtra(
            Intent.EXTRA_STREAM,
            Uri.fromFile(attachment));

    Intent chooser = Intent.createChooser(
            emailIntent, 
            context.getString(R.string.send_mail_chooser));

    context.startActivity(chooser);
}
Run Code Online (Sandbox Code Playgroud)

在创建文件或发送意图时,我有什么问题吗?有没有更好的方法来启动带附件的邮件应用程序?或者 …

android android-intent

41
推荐指数
4
解决办法
2万
查看次数

如何仅使用电子邮件应用程序发送附件电子邮件?

有两个要求:

  • 电子邮件附件
  • Intent选择器中,应该只有电子邮件应用程序.

我所知道/做过的事:

  • Intent.ACTION_SENDTOintent.setData(Uri.parse("mailto:"))可以确保有只在电子邮件应用程序Intent选择器,但它不会带来附件(如Gmail它将一些应用程序,但也有将忽略附着许多应用程序).

  • Intent.ACTION_SEND可以发送附件的电子邮件.但是,在Intent选择器中,会有应用程序实际上不是电子邮件应用程序但可以响应Intent.ACTION_SEND.使用intent.setType("message/rfc822")可以减少这些应用程序的数量,但不是全部.

  • 参考这个答案:https://stackoverflow.com/a/8550043/3952691并且几乎成功实现了我的目标.我的代码如下:

    private static void sendFeedbackWithAttachment(Context context, String subject) {
        Intent intent = new Intent(Intent.ACTION_SENDTO);
        intent.setData(Uri.parse("mailto:"));
    
        PackageManager packageManager = context.getPackageManager();
        List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent, 0);
        if (resolveInfos.isEmpty()) {
            Toast.makeText(context, context.getString(R.string.error_activity_not_found),
                    Toast.LENGTH_SHORT).show();
        } else {
            // ACTION_SEND may be replied by some apps that are not email apps. However,
            // ACTION_SENDTO doesn't allow us to choose attachment. As …
    Run Code Online (Sandbox Code Playgroud)

email android android-intent

11
推荐指数
1
解决办法
1034
查看次数

Android如何发送多个联系人附加在单个.vcf文件中并发送到邮件?

在我的应用程序中,一些联系人被附加到单个.vcf文件并且该文件发送到邮件,尝试在log cat中显示所有联系人数据,但是无法发送附加到单个.vcf文件的所有数据?

任何人都有这个帮助我的想法,请.

这是我的代码

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);  

    vCard = new ArrayList<String>();                 

    Log.i("TAG one", "vfile" +vfile);
    vfile = "Contacts" + "_" + System.currentTimeMillis() + ".vcf";  

    /**
     * This Function For Vcard And here i take one Array List in Which i
     * store every Vcard String of Every Contact Here i take one Cursor and
     * this cursor is not null and its count>0 than i repeat one loop up to
     * cursor.getcount() means Up …
Run Code Online (Sandbox Code Playgroud)

android contacts vcf

8
推荐指数
1
解决办法
7724
查看次数

读取通过slf4android记录的文件?

我正在使用slf4android(https://github.com/bright/slf4android)编写日志,但是如何阅读它们并不明显(理想情况下我只想将它们下载到我的计算机上).其他应用无法访问该应用的内部存储空间.我可以配置slf4android来登录共享目录吗?我试过这个,但我得到了通知:

FileLogHandlerConfiguration fileHandler = LoggerConfiguration.fileLogHandler(this);
File lol = this.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS);
fileHandler.setFullFilePathPattern(fileHandler.toString() + "/my_log.%g.%u.log");
LoggerConfiguration.configuration().addHandlerToRootLogger(fileHandler);
Run Code Online (Sandbox Code Playgroud)

logging android slf4j slf4android

5
推荐指数
2
解决办法
265
查看次数