Android 自定义共享对话框,不适用于某些应用程序

Android 自定义共享对话框,不适用于某些应用程序,android,android-intent,dialog,share,evernote,Android,Android Intent,Dialog,Share,Evernote,我在我的android应用程序中实现了一个自定义共享对话框。我正在共享图像,很有趣,它不适用于Evernote应用程序。我可以默认方式与Evernote共享。但它不适用于此代码。我只在Evernote应用程序中体验过这一点 这是我的代码: public void doShareCustomDialog() { Bitmap curBitmap = ((ImagePagerAdapter) viewPager.getAdapter()) .getCurrentBit

我在我的android应用程序中实现了一个自定义共享对话框。我正在共享图像,很有趣,它不适用于Evernote应用程序。我可以默认方式与Evernote共享。但它不适用于此代码。我只在Evernote应用程序中体验过这一点

这是我的代码:

public void doShareCustomDialog() {
    Bitmap curBitmap = ((ImagePagerAdapter) viewPager.getAdapter())
            .getCurrentBitmap();
    final Intent imageIntent = new Intent();
    imageIntent.setAction(Intent.ACTION_SEND);
    imageIntent.setType("image/jpeg");
    imageIntent.putExtra(Intent.EXTRA_STREAM,
            getImageUri(getActivity(), curBitmap));

    final Dialog dialog = new Dialog(getActivity());
    dialog.setTitle("Choose application:");
    dialog.getWindow().setBackgroundDrawable(
            new ColorDrawable(R.color.black_overlay));
    dialog.setCanceledOnTouchOutside(true);
    ListView lv = new ListView(getActivity());
    dialog.setContentView(lv);
    dialog.show();

    PackageManager pm = getActivity().getPackageManager();
    List<ResolveInfo> launchables = pm
            .queryIntentActivities(imageIntent, 0);
    Collections
            .sort(launchables, new ResolveInfo.DisplayNameComparator(pm));

    final AppAdapter adapter = new AppAdapter(pm, launchables);
    lv.setAdapter(adapter);
    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            ResolveInfo launchable = adapter.getItem(position);
            ActivityInfo activity = launchable.activityInfo;
            ComponentName name = new ComponentName(
                    activity.applicationInfo.packageName, activity.name);
            imageIntent.addCategory(Intent.CATEGORY_LAUNCHER);
            imageIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                    | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
            imageIntent.setComponent(name);
            startActivity(imageIntent);
        }
    });

}
这里的代码工作得非常好,但是没有自定义对话框,而是使用默认对话框

public void doShare() {
    Bitmap curBitmap = ((ImagePagerAdapter) viewPager.getAdapter())
            .getCurrentBitmap();
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_SEND);
    intent.setType("image/jpeg");
    intent.putExtra(Intent.EXTRA_STREAM,
            getImageUri(getActivity(), curBitmap));
    setShareIntent(intent);
    startActivity(Intent.createChooser(intent,
            getResources().getText(R.string.share_choose)));
}

我首先要提到我是Evernote的员工。我试过你的代码片段,它可以工作。这取决于此方法:

imageIntent.putExtra(Intent.EXTRA_STREAM,
        getImageUri(getActivity(), curBitmap));
您可能想发布如何生成Uri。在我的测试中,如果你的文件在应用程序的内部存储中,这肯定不起作用。如果文件存储在外部存储器上,那么如果Uri正确,代码就会工作


如果要共享来自内部存储器的文件,则需要实现并使用生成Uri。然后我的测试成功了。

这不是你的应用程序的问题。这是Evernote应用程序的问题。请解释什么不工作意味着什么。当我单击共享菜单列表中的Evernote按钮时,什么都没有发生。是的,很可能是Evernote的问题,但是为什么会发生这种情况,我能做些什么来让它工作。这是意图中的一些问题吗?是的,我研究了这一点,意图的这一部分是可以的。我认为问题出在onItemClick方法的某个地方。工作意图的区别是imageIntent.SetFlagsInt.FLAG_ACTIVITY_NEW_TASK | intent.FLAG_ACTIVITY__RESET_TASK(如果需要的话);是否确实要重置并创建新任务?如果用户点击后退按钮,这可能会导致意外的结果。您不会返回到您的应用程序,而是停留在收到共享意图的其他应用程序中。此外,如果新应用程序已具有后台堆栈,则新活动不会启动,例如打开信息应用程序、打开设置、按home键、转到应用程序、与信息应用程序共享位图。没有新消息被创建。删除该行,修复它,我仍然,不太明白,为什么会发生这种情况。但非常感谢!
imageIntent.putExtra(Intent.EXTRA_STREAM,
        getImageUri(getActivity(), curBitmap));