在twitter上共享文本和图像,电子邮件不会在android 4.4 ACTION_SEND中加载图像

在twitter上共享文本和图像,电子邮件不会在android 4.4 ACTION_SEND中加载图像,android,android-intent,twitter,android-sharing,Android,Android Intent,Twitter,Android Sharing,我做了​​在twitter上共享文本和图片,使用intent ACTION_SEND,可以从我的资产文件夹访问我的图像,访问这些资源的权限已经实现了内容提供商并分配了权限,我在android 4.1.2中测试了共享操作并运行,但是,当使用android 4.4测试时,标记我一个错误,不过滤你不能添加图像,文本我只是添加,我做了一个测试,更改了可绘制图像,并将图像列为发布者,但不再通过添加来完成 在manifest.xml中声明我的内容提供程序 <provider and

我做了​​在twitter上共享文本和图片,使用intent ACTION_SEND,可以从我的资产文件夹访问我的图像,访问这些资源的权限已经实现了内容提供商并分配了权限,我在android 4.1.2中测试了共享操作并运行,但是,当使用android 4.4测试时,标记我一个错误,不过滤你不能添加图像,文本我只是添加,我做了一个测试,更改了可绘制图像,并将图像列为发布者,但不再通过添加来完成

在manifest.xml中声明我的内容提供程序

  <provider
        android:name="com.domain.app.helper.ImageProvider" 
        android:authorities="com.domain.app"
        android:grantUriPermissions="true"
           android:exported="true"
           android:multiprocess="true"
        >
    </provider>
在共享方面使用我的内容提供商

@SuppressLint("DefaultLocale")
private void share(View v, String nameApp, String infoText, String nameImage) {

    try {

        List<Intent> targetedShareIntents = new ArrayList<Intent>();
        Intent share = new Intent(android.content.Intent.ACTION_SEND);
        share.setType("image/jpeg");
        List<ResolveInfo> resInfo = context.getPackageManager().queryIntentActivities(share, 0);
        if (!resInfo.isEmpty()){
            for (ResolveInfo info : resInfo) {
                Intent targetedShare = new Intent(android.content.Intent.ACTION_SEND);


                if (info.activityInfo.packageName.toLowerCase().contains(nameApp) || 
                        info.activityInfo.name.toLowerCase().contains(nameApp)) {

                    //fix Facebook only share link
                    if (info.activityInfo.packageName.toLowerCase().contains("facebook") || 
                            info.activityInfo.name.toLowerCase().contains("facebook")){

                        targetedShare.setType("text/plain"); // put here your mime type
                        targetedShare.putExtra(android.content.Intent.EXTRA_SUBJECT, "The app");
                        targetedShare.putExtra(android.content.Intent.EXTRA_TEXT, context.getResources().getString(R.string.url_short_app) );
                    }
                    else{
                        ///targetedShare.setType( "image/*");
                        targetedShare.setType( "*/*");

                        String bodyMsg = infoText + ", " + context.getResources().getString(R.string.firm_shared) +" > " + context.getResources().getString(R.string.url_short_app);
                        targetedShare.putExtra(Intent.EXTRA_TEXT, bodyMsg);
 //this change for test
//Uri uri = Uri.parse("android.resource://"+context.getPackageName()+"/drawable/table");


                        Uri theUri = Uri.parse("content://"+context.getPackageName()+"/"+nameImage);

                        targetedShare.putExtra(Intent.EXTRA_STREAM, theUri);

                    } 
                    targetedShare.setPackage(info.activityInfo.packageName);
                    targetedShareIntents.add(targetedShare);

                }
            }

            Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Select app to share");
            chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
            v.getContext().startActivity(chooserIntent);
        }
    } catch (Exception e) {
        Log.i("ERROR_SHARE", e.toString());
    }
}
@SuppressLint(“DefaultLocale”)
私有void共享(视图v、字符串nameApp、字符串infoText、字符串nameImage){
试一试{
List targetedShareContents=new ArrayList();
意向共享=新意向(android.content.Intent.ACTION\u SEND);
share.setType(“图像/jpeg”);
List resInfo=context.getPackageManager().queryInputActivities(共享,0);
如果(!resInfo.isEmpty()){
对于(ResolveInfo:resInfo){
Intent targetedShare=新意图(android.content.Intent.ACTION\u SEND);
if(info.activityInfo.packageName.toLowerCase().contains(nameApp)|
info.activityInfo.name.toLowerCase().contains(nameApp)){
//修复仅Facebook共享链接
如果(info.activityInfo.packageName.toLowerCase())包含(“facebook”)||
info.activityInfo.name.toLowerCase()包含(“facebook”)){
targetedShare.setType(“text/plain”);//在这里输入mime类型
targetedShare.putExtra(android.content.Intent.EXTRA_主题,“应用程序”);
targetedShare.putExtra(android.content.Intent.EXTRA_TEXT,context.getResources().getString(R.string.url_short_app));
}
否则{
///targetedShare.setType(“image/*”);
targetedShare.setType(“*/*”);
String bodyMsg=infoText+“,”+context.getResources().getString(R.String.firm_shared)+“>”+context.getResources().getString(R.String.url_short_app);
targetedShare.putExtra(Intent.EXTRA_TEXT,bodyMsg);
//这个变化是为了测试
//Uri=Uri.parse(“android.resource://“+context.getPackageName()+”/drawable/table”);
Uri theUri=Uri.parse(“内容:/”+context.getPackageName()+“/”+nameImage);
targetedShare.putExtra(Intent.EXTRA_流,theUri);
} 
targetedShare.setPackage(info.activityInfo.packageName);
targetedShareContents.add(targetedShare);
}
}
Intent chooserecontent=Intent.createChooser(targetedShareContents.remove(0),“选择要共享的应用程序”);
选择content.putExtra(Intent.EXTRA_INITIAL_INTENTS,targetedShareContents.toArray(新包裹[]{}));
v、 getContext().startActivity(选择内容);
}
}捕获(例外e){
Log.i(“ERROR_SHARE”,例如toString());
}
}
我希望你能帮我找出毛病所在


我假设安卓4.4已经改变了访问内容提供商资源的方式

是的,安卓4.4 KitKat确实改变了很多事情。由于您正在使用彩信服务提供商发送信息,除非您是“默认短信应用”,否则它将(无声)拒绝向ContentProvider写入信息

我们公司正致力于一个“开放”的解决方案,但我不知道在这个时候有任何。。。这根本不适合你

@SuppressLint("DefaultLocale")
private void share(View v, String nameApp, String infoText, String nameImage) {

    try {

        List<Intent> targetedShareIntents = new ArrayList<Intent>();
        Intent share = new Intent(android.content.Intent.ACTION_SEND);
        share.setType("image/jpeg");
        List<ResolveInfo> resInfo = context.getPackageManager().queryIntentActivities(share, 0);
        if (!resInfo.isEmpty()){
            for (ResolveInfo info : resInfo) {
                Intent targetedShare = new Intent(android.content.Intent.ACTION_SEND);


                if (info.activityInfo.packageName.toLowerCase().contains(nameApp) || 
                        info.activityInfo.name.toLowerCase().contains(nameApp)) {

                    //fix Facebook only share link
                    if (info.activityInfo.packageName.toLowerCase().contains("facebook") || 
                            info.activityInfo.name.toLowerCase().contains("facebook")){

                        targetedShare.setType("text/plain"); // put here your mime type
                        targetedShare.putExtra(android.content.Intent.EXTRA_SUBJECT, "The app");
                        targetedShare.putExtra(android.content.Intent.EXTRA_TEXT, context.getResources().getString(R.string.url_short_app) );
                    }
                    else{
                        ///targetedShare.setType( "image/*");
                        targetedShare.setType( "*/*");

                        String bodyMsg = infoText + ", " + context.getResources().getString(R.string.firm_shared) +" > " + context.getResources().getString(R.string.url_short_app);
                        targetedShare.putExtra(Intent.EXTRA_TEXT, bodyMsg);
 //this change for test
//Uri uri = Uri.parse("android.resource://"+context.getPackageName()+"/drawable/table");


                        Uri theUri = Uri.parse("content://"+context.getPackageName()+"/"+nameImage);

                        targetedShare.putExtra(Intent.EXTRA_STREAM, theUri);

                    } 
                    targetedShare.setPackage(info.activityInfo.packageName);
                    targetedShareIntents.add(targetedShare);

                }
            }

            Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Select app to share");
            chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
            v.getContext().startActivity(chooserIntent);
        }
    } catch (Exception e) {
        Log.i("ERROR_SHARE", e.toString());
    }
}