任何试图通过Android分享到Facebook的人都知道,Facebook团队决定忽略共享协议并忽略共享意图中提供的文本(请参阅:通过ACTION_SEND从Android应用程序在Facebook上共享文本)
然而,看来Twitter应用程序已经找到了如何规避这一点.当你在看推文时:

您可以单击推文下方的共享图标,它会显示包含Facebook的应用列表的正常共享对话框:

如果您点击Facebook,您会看到以下视图:

这看起来很完美,显然twitter发送的不仅仅是其他答案似乎提出的链接.此外,如果您分享到消息:

您可以看到文本已正确添加且没有任何问题.twitter是如何让这个工作的?
我试图捕获结果,Intent.createChooser以了解用户选择共享的应用程序.
我知道有很多与此相关的帖子:
但是这些帖子有些陈旧,我希望可能会有一些新的发展.
我正在尝试实现共享操作,而不会出现在菜单中.我想要的最接近的解决方案由ClickClickClack提供,他建议实施自定义应用程序选择器,但这似乎很重要.此外,似乎可能会有一些Android钩子来获取所选的应用程序,例如ActivityChooserModel.OnChooseActivityListener.
我的MainActivity中有以下代码,但该onShareTargetSelected方法永远不会被调用.
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, shareMessage());
sendIntent.setType("text/plain");
Intent intent = Intent.createChooser(sendIntent, getResources().getText(R.string.share_prompt));
ShareActionProvider sap = new ShareActionProvider(this);
sap.setShareIntent(sendIntent);
sap.setOnShareTargetSelectedListener(new ShareActionProvider.OnShareTargetSelectedListener() {
@Override
public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) {
System.out.println("Success!!");
return false;
}
});
startActivityForResult(intent, 1);
Run Code Online (Sandbox Code Playgroud) 我正在使用ACTION_SEND的Intent,我需要分享不同的文本.我需要发送Gmail文本,我需要发送其他文本的twitter.取决于应用程序.在应用程序发送共享文本之前,我可以获取用户选择的应用程序吗?
我正在使用带有此代码的android本机共享:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, "I like to share with you some stuff.");
intent.putExtra(Intent.EXTRA_SUBJECT, "I like to share with you.");
intent.setType(CONTENT_TYPE_TEXT);
startActivity(Intent.createChooser(intent, "Share");
Run Code Online (Sandbox Code Playgroud)
当我使用电子邮件作为分享渠道时,我得到了我想要的:
Subject: I like to share with you.
Text: I like to share with you some stuff.
Run Code Online (Sandbox Code Playgroud)
当我使用 WhatsApp 作为分享渠道时,我得到以下文本:
I like to share with you.
I like to share with you some stuff.
Run Code Online (Sandbox Code Playgroud)
与 Whatsapp 分享时我期望什么:
I like to share with you some stuff.
Run Code Online (Sandbox Code Playgroud)
如果共享频道基本上不支持主题,是否有任何选项/标志指示共享频道来抑制主题。
例如,电子邮件支持主题 -> 使用额外提供的意图。WhatsApp 不支持主题 -> 不要额外使用提供的意图。
无法在我的应用程序堆栈中启动默认短信活动.在nexus 6棒棒糖和android一个棉花糖中看到的问题.
我试图发送ACTION_VIEW的意图,并设置smsto:和sms正文.
我能够启动短信应用程序.
我有我的应用程序的以下行为.
我的应用程序中有联系号码列表
当用户说邀请时,我想启动默认短信应用程序,填写和短信正文和默认短信应用程序应该在我的活动任务.
在退回时,我想关闭消息应用程序.
请参阅下面的参考图片1.我的应用程序邀请2.在邀请,启动短信
我能够实现的目标.我能够在kitkat中实现上述功能.(默认短信应用程序完成),但不是在棒棒糖和棉花糖.默认短信应用程序转到后台.
问题是,app在新的活动任务中启动.我无法在我的活动任务中获得该消息传递应用程序.如果我按回该消息传递应用程序,我可以回到我的应用程序.但是,如果我从最近的列表中选择消息传递应用程序,它每次都会显示短信收件人和正文填充的活动.
请在下面找到代码段
private void sendTextMessage(String to)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) // At least KitKat
{
String defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(mActivity); // Need to change the build to API 19
Logger.log_error(TAG + "sendTextMessage() above KITKAT");
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra("address", to);
sendIntent.putExtra("sms_body", "sms body");
sendIntent.putExtra(Intent.EXTRA_TEXT, "sms body");
if (defaultSmsPackageName != null)// Can be null in case that there is no default, then the user would …Run Code Online (Sandbox Code Playgroud) android android-intent android-5.0-lollipop google-app-invites
我的应用程序共享一个特定的 URL 以在其他应用程序中打开,但我想根据用户与之共享的应用程序使用自定义 URL。例如,我想用 Gmail ,我想myurl.com?src=gmail用 FBmyurl.com?src=fb等等。
这通常适用于这个著名的方法:https : //stackoverflow.com/a/18068122/3015986。但是,在 Android 10 中,该解决方案不再有效:https : //medium.com/@AndroidDeveloperLB/this-wont-work-anymore-on-android-q-1702c19eb7bb
那么,还有哪些其他选择呢?
我目前有一个应用程序记录视频并将其上传到我的服务器.上传视频后,应用会收到一个响应,其中包含指向文件的flv流的URL.
当我尝试在Android默认视频播放器(视频)中打开流时没有任何反应,但是当我使用其他应用程序(BSPlayer)时,它完美地播放了视频.但是,没有办法强制打开一个应用程序Intent.ACTION_VIEW.这是从服务器接收响应的函数的代码:
@Override
protected void onResponseReceived(int requestType, int status, Object resp) {
switch (requestType) {
case CLIP_DETAILS: {
if (status == RESPONSE_OK) {
String token1 = ((ResponseObject_ClipDetails) resp).m_token1;
String token2 = ((ResponseObject_ClipDetails) resp).m_token2;
String url = getClipURL(token1, token2);
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
i.setType("video/flv");
startActivity(i);
}
}
break;
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在我的Android应用程序中显示.flv视频?
我正在寻找一种方法在设备中搜索所有能够通过动作"VIEW"和类别"BROWSABLE"过滤意图的应用程序?
我找到了以下链接并学习了如何列出所有Intent过滤器,但是如何只列出那些只有上述参数?
如何针对ACTION_SEND意图过滤特定应用(并为每个应用设置不同的文字)
提前致谢
我目前正在为 Android 应用程序中的一些流行平台创建直接意图,以共享一些文本。我目前正试图获得与 LinkedIn 合作的直接意图。
我目前有一个直接的意图为 Twitter 工作,如下所示:
shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setClassName("com.twitter.android",
"com.twitter.android.PostActivity");
shareIntent.setType("text/*");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, text);
startActivityForResult(shareIntent, 9);
Run Code Online (Sandbox Code Playgroud)
我现在需要的和 LinkedIn 是一样的。到目前为止,我在互联网上搜索后知道了 LinkedIn 的基本包。那是“com.linkedin.android”(如果这是错误的,请纠正我)。但是,我缺少的关键部分是在 LinkedIn 应用程序中处理共享的类的名称。即 com.linkedin.android.?。
根据此解决方案,我想在自定义共享对话框中添加"复制到剪贴板"操作 - 与默认操作共享提供程序中的操作相同.

我试过的是加入if clausule语句,packageName.contains("clipboard")但没有成功.
String packageName = ri.activityInfo.packageName;
if(packageName.contains("android.email")) {
emailIntent.setPackage(packageName);
} else if(packageName.contains("twitter") || packageName.contains("facebook") || packageName.contains("mms") || packageName.contains("android.gm")) {
Intent intent = new Intent();
intent.setComponent(new ComponentName(packageName, ri.activityInfo.name));
intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
if(packageName.contains("twitter")) {
intent.putExtra(Intent.EXTRA_TEXT, resources.getString(R.string.share_twitter));
} else if(packageName.contains("facebook")) {
intent.putExtra(Intent.EXTRA_TEXT, resources.getString(R.string.share_facebook));
} else if(packageName.contains("mms")) {
intent.putExtra(Intent.EXTRA_TEXT, resources.getString(R.string.share_sms));
} else if(packageName.contains("android.gm")) {
intent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(resources.getString(R.string.share_email_gmail)));
intent.putExtra(Intent.EXTRA_SUBJECT, resources.getString(R.string.share_email_subject));
intent.setType("message/rfc822");
}
intentList.add(new LabeledIntent(intent, packageName, ri.loadLabel(pm), ri.icon));
}
Run Code Online (Sandbox Code Playgroud)
整个代码用于/sf/answers/1264768571/.
adb shell pm list packages 返回我的包名列表但没有这个短语.
我可以以某种方式获取剪贴板的包名称将其添加到我的自定义共享提供程序列表中吗?
以下是"复制到剪贴板"选项的示例:

我已经实现了一个应用程序,我可以在其中选择一个联系人,并在tablelayout中列出有关此联系人的一些自定义信息.在这个tablelayout的每一行中,我有一个列(按钮),它应该使用sms,whatapp,hike等向特定用户发送消息.在click事件中,Action_Send intent应该打开但是必须选择我想要的联系人将联系人或联系人ID作为额外内容,以便我不必从whatsapp/sms/hike intent中的列表中选择联系人.这是可能的还是我必须自己实现发送到选择器并为每个应用启动特定的意图?
干杯马格努斯
我想知道是否有可能从共享意图中打开浏览器。让我举一个例子来澄清:我有一个包含新闻的应用程序。每个新闻都有一个 url,以便用户可以通过 Whatsapp、蓝牙、环聊或其他方式与已知的 Android 共享意图共享此链接。现在我想知道用户是否也可以出于此共享意图在浏览器中打开此链接。那么:我是否能够说出他的意图,即他还应该显示在浏览器中打开新闻网址的机会?
我当前的分享意图如下所示:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setType("text/plain");
String shareString = news.getLink();
intent.putExtra(Intent.EXTRA_TEXT, shareString);
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud) I have the following code which used to send text from my app to Email:
Intent mail = new Intent(Intent.ACTION_VIEW);
mail.setClassName("com.google.android.gm","com.google.android.gm.ComposeActivityGmail");
mail.putExtra(Intent.EXTRA_EMAIL, new String[] { });
mail.setData(Uri.parse(""));
mail.putExtra(Intent.EXTRA_SUBJECT, "Country Decryption");
mail.setType("plain/text");
mail.putExtra(Intent.EXTRA_TEXT, "my text");
ctx.startActivity(mail);
Run Code Online (Sandbox Code Playgroud)
It works , but as you see, it uses Gmail app, how do I make it use Email application instead of Gmail?
and what about sharing to Facebook ? I found that Facebook does not support sharing using intent anymore, and …