相关疑难解决方法(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万
查看次数

在Android API 19(4.4)上,intent.createChooser方法会导致IntentServiceLeak

在新的Android KitKat设备上运行我的应用程序(API 19,4.4)每当我尝试创建一个Intent选择器时,我都会"复制到剪贴板".这是在Youtube,Tumblr以及Android KitKat上的各种其他应用程序中发生的.查看日志我看到以下异常:

com.android.internal.app.ChooserActivity泄露了IntentReceiver com.android.internal.app.ResolverActivity$1@4150aac8

这曾经是设备没有多个Intent应用程序时出现的问题(请参阅为什么Intent.createChooser()需要BroadcastReceiver以及如何实现?).但是,我的设备不是这种情况.似乎Android API 19中的某些内容已被破坏.

android android-intent android-4.4-kitkat

7
推荐指数
1
解决办法
4753
查看次数

ChooserActivity泄露了IntentReceiver

E/ActivityThread(  655): Activity com.android.internal.app.ChooserActivity has
leaked IntentReceiver com.android.internal.app.ResolverActivity$1@412f4f38 
that was originally registered here. 

Are you missing a call to unregisterReceiver()? E/ActivityThread(  655): 
android.app.IntentReceiverLeaked: 
Activity com.android.internal.app.ChooserActivity has leaked IntentReceiver 
com.android.internal.app.ResolverActivity$1@412f4f38 that was originally 
registered here. Are you missing a call to unregisterReceiver()?
Run Code Online (Sandbox Code Playgroud)
  1. 这个错误是什么意思?
  2. 既然应用程序继续工作,我应该忽略它吗?
  3. 我该如何解决?

当我在此处发布的例程后从手机图库中选择图像时,会发生这种情况.正是当我按下活动布局中定义的浏览图库按钮时.


完整的LOGCAT:

E/ActivityThread(  655):    at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:763)
E/ActivityThread(  655):    at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:567)
E/ActivityThread(  655):    at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1043)
E/ActivityThread(  655):    at android.app.ContextImpl.registerReceiver(ContextImpl.java:1030)
E/ActivityThread(  655):    at android.app.ContextImpl.registerReceiver(ContextImpl.java:1024)
E/ActivityThread(  655):    at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:341)
E/ActivityThread(  655):    at com.android.internal.content.PackageMonitor.register(PackageMonitor.java:65)
E/ActivityThread(  655):    at com.android.internal.app.ResolverActivity.onCreate(ResolverActivity.java:99) …
Run Code Online (Sandbox Code Playgroud)

java debugging android memory-leaks android-activity

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