我想通过Facebook从android jelly bean分享一些图片和文字。除了android jelly bean之外,它适用于所有设备。有人请帮我解决这个问题。
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Content to share");
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList) {
if ((app.activityInfo.name).contains("facebook")) {
final ActivityInfo activity = app.activityInfo;
final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
System.out.println("package name"+name);
shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
shareIntent.setComponent(name);
v.getContext().startActivity(shareIntent);
break;
在这段代码中,我想要一些文字。但EXTRA_TEXT无效。如何在此EXTRA_TEXT中传递字符串或图像。
答案 0 :(得分:6)
您不仅应该直接定位Facebook。
相反,您应该只使用Share Intent。按照SDK中指定的额外内容传递数据,然后让用户选择要与之共享的内容。不要强迫他们使用Facebook,因为他们不唯一的社交媒体。 Theres还有twitter,4square以及用户使用的许多其他内容。让这些应用程序处理您的意图,不要指定如此严格的限制,因为不意图操作ACTION_SEND
的工作方式。
至于你对Extra的问题,显然EXTRA_TEXT
意图不起作用,因为它不用于图像或任何像这样的引用。
http://developer.android.com/reference/android/content/Intent.html#ACTION_SEND
它说:
启动SEND意图时,通常应将其包装在选择器中 (通过createChooser(Intent,CharSequence)),这将给出 适当的界面,供用户选择如何发送数据和允许 您可以指定一个提示,说明他们正在做什么。
输入:getType()是要发送的数据的MIME类型。获得额外的* 可以有EXTRA_TEXT或EXTRA_STREAM字段,包含 要发送的数据。如果使用EXTRA_TEXT,则MIME类型应为 “文本/纯”;否则它应该是数据的MIME类型 EXTRA_STREAM。如果MIME类型未知,请使用 / (仅限此类型 允许可以处理通用数据流的发件人。如果使用 EXTRA_TEXT,您还可以选择为客户提供EXTRA_HTML_TEXT 使用HTML格式检索文本。
从JELLY_BEAN开始,可以通过发送的数据提供 setClipData(ClipData)。这允许你使用 共享内容时的FLAG_GRANT_READ_URI_PERMISSION:URI和其他 ClipData的高级功能。如果使用这种方法,你仍然必须 通过EXTRA_TEXT或EXTRA_STREAM字段提供相同的数据 下面描述与旧应用程序的兼容性。如果你不这样做 设置一个ClipData,它会在调用时为你复制 startActivity(意向)。
可选标准附加内容,可能由某些收件人解释 适当的是:EXTRA_EMAIL,EXTRA_CC,EXTRA_BCC,EXTRA_SUBJECT。
根据这些信息,您还需要在意图类型中为特定数据设置mimetype。
答案 1 :(得分:2)
试试下面的代码。我用这段代码分享了Text&amp;来自我的一个应用程序的图像和它的工作对我来说很棒。
我希望它也适合你。
File pngDir = new File(Environment.getExternalStorageDirectory(),"Android/data/Textures"); if (!pngDir.exists()) { pngDir.mkdirs(); } File pngfile = new File(pngDir,"texture1.png"); Uri pngUri = Uri.fromFile(pngfile); Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); shareIntent.setType("image/png"); shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Text to Share"); shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Context to share"); shareIntent.putExtra(android.content.Intent.EXTRA_STREAM, pngUri); //Share the image on Facebook PackageManager pm = getApplicationContext().getPackageManager(); List<ResolveInfo> activityList = pm.queryIntentActivities( shareIntent, 0); for (final ResolveInfo app : activityList) { if ((app.activityInfo.name).contains("facebook")) { final ActivityInfo activity = app.activityInfo; final ComponentName name = new ComponentName( activity.applicationInfo.packageName, activity.name); shareIntent.addCategory(Intent.CATEGORY_LAUNCHER); shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); shareIntent.setComponent(name); startActivity(shareIntent); break; } }
在此我已经使用了存储在设备中特定位置的图像。您可以根据图像位置进行更改。
答案 2 :(得分:0)