在使用ACTION_SEND意图时,如何过滤掉特定应用? 这个问题已经以各种方式提出,但我无法根据给出的答案收集解决方案.希望有人可以提供帮助.我想提供在应用程序内共享的功能.根据Android Dev Alexander Lucas的建议,我更倾向于使用意图并且不使用Facebook/Twitter API.

使用ACTION_SEND意图共享非常好,但问题是(1)我不希望每个共享选项,我宁愿将其限制为FB,Twitter和电子邮件,以及(2)我不想分享每个共享应用程序都是一样的.例如,在我的推特分享中,我将包括一些提及和主题标签限制为140或更少,而Facebook分享将包括链接和功能图像.
是否可以限制ACTION_SEND(共享)意图的选项?我已经看到了使用PackageManager和queryIntentActivities的一些事情,但是却无法弄清楚PackageManager和ACTION_SEND意图之间的联系.
要么
如果我可以使用ACTION_SEND意图直接进入Facebook或Twitter而不是弹出对话框,而不是过滤共享应用程序,我的问题也可以解决.如果是这种情况,那么我可以创建自己的对话框,当他们点击"Facebook"创建一个特定于Facebook的意图,然后将它们一直发送到Facebook.与Twitter相同.
或者是不可能的?Facebook和Twitter API是唯一的方式吗?
是否有可能显示一个应用程序列表(intent.createChooser仅),只显示我的手机上的我的推特应用程序(所以htc peep(htc hero)或twitdroid).我试过它,intent.settype("application/twitter")但它没有找到任何Twitter的应用程序,只显示我的邮件应用程序.
谢谢,
沃特
我使用这样的东西在用户手机上使用可用的应用程序共享一些文本.
public void share(String subject,String text) {
final Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, text);
startActivity(Intent.createChooser(intent, getString(R.string.share)));
}
Run Code Online (Sandbox Code Playgroud)
我的主要问题是,如果用户选择Twitter而不是电子邮件,我希望有一个不同的文本(短版本的短版本VS带有附加图像的全文).
如何找出用户决定使用哪个应用程序?
只想分享动态文本字符串+应用程序的URL.原生的Android共享意图设置正确,并且与Twitter,Gmail等完美配合.但是,正如许多人猜测的那样,它不适用于Facebook.显然因为Facebook不接受该intent.EXTRA_TEXT领域的文字,只有一个网址.
好吧,我对你们的问题是:有没有办法根据他们选择分享的方法来分支共享意图?例如,如果他们通过Gmail或Twitter共享,请使用现有的String + URL(所需选项)EXTRA_TEXT,但如果他们选择通过Facebook共享,则只使用URL作为EXTRA_TEXT.
并不是真的想要实现Facebook Android SDK来完成Android内置的简单任务.
感谢您的时间和建议.
试过这样的事情,但它显然失败了,因为它只检查共享选项是否存在(当共享弹出时,而不是在他们点击共享方法之后),它在选择方法时没有响应.
String shareBody = "app string text " + act_txt + " more text! Get the app at http://www.appurl.com";
PackageManager pm = view.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(sharingIntent, 0);
for(final ResolveInfo app : activityList) {
Log.i(TAG, "app.actinfo.name: " + app.activityInfo.name);
//if((app.activityInfo.name).contains("facebook")) {
if("com.facebook.katana.ShareLinkActivity".equals(app.activityInfo.name)) {
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "http://www.appurl.com");
startActivity(Intent.createChooser(sharingIntent, "Share idea"));
break;
} else {
sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "app name");
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
startActivity(Intent.createChooser(sharingIntent, "Share"));
break;
}
}
Run Code Online (Sandbox Code Playgroud) 有两个要求:
Intent选择器中,应该只有电子邮件应用程序.我所知道/做过的事:
Intent.ACTION_SENDTO与intent.setData(Uri.parse("mailto:"))可以确保有只在电子邮件应用程序Intent选择器,但它不会带来附件(如Gmail它将一些应用程序,但也有将忽略附着许多应用程序).
Intent.ACTION_SEND可以发送附件的电子邮件.但是,在Intent选择器中,会有应用程序实际上不是电子邮件应用程序但可以响应Intent.ACTION_SEND.使用intent.setType("message/rfc822")可以减少这些应用程序的数量,但不是全部.
参考这个答案:https://stackoverflow.com/a/8550043/3952691并且几乎成功实现了我的目标.我的代码如下:
private static void sendFeedbackWithAttachment(Context context, String subject) {
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:"));
PackageManager packageManager = context.getPackageManager();
List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent, 0);
if (resolveInfos.isEmpty()) {
Toast.makeText(context, context.getString(R.string.error_activity_not_found),
Toast.LENGTH_SHORT).show();
} else {
// ACTION_SEND may be replied by some apps that are not email apps. However,
// ACTION_SENDTO doesn't allow us to choose attachment. As …Run Code Online (Sandbox Code Playgroud)我想知道,有没有办法选择使用Intent.createChooser方法的行为?例如,我有一个图像,我想通过电子邮件发送,如果它被选中(第一个选项).在第二个选项,我想发送sms此图像上的链接(为此我需要复杂的操作 - 上传图像到服务器,检索下载链接,我想在其中sms,并将其粘贴到sms)
你能否提出任何建议,我该怎样做才能完成第二项任务?
我相信我可以发送带有这样的图像的电子邮件:
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("application/image");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{textMail});
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,"Some Subj");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Some Extra Text");
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(fileUri));
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
Run Code Online (Sandbox Code Playgroud)
UPD:我意识到,我真正需要的是拦截用户点击,如果sms是在意图选择器中选择的话.那么,问题是如何实现它?
起初你会想到"等等,这个问题是重复的!".继续阅读.
我正在尝试使用Intent ACTION_SENDTO(使用电子邮件URI作为数据),以便只有电子邮件应用程序响应.
(使用ACTION_SEND启动标准"SEND"选择器而没有数据URI意味着非电子邮件应用程序(如Google Drive)也会响应).
我的问题是附件适用ACTION_SEND于所有设备,但是 - 当ACTION_SENDTO只使用某些设备正确附加文件时.Nexus 7可以使用,但三星Galaxy Tab和Acer Iconia 没有.
您可以在下面看到不同的方法:
String email = getActivity().getResources().getString(R.string.supportEmail);
String subject = getActivity().getResources().getString(R.string.sFeedback);
subject = String.format(subject,
getActivity().getResources().getString(R.string.productName));
String content = getActivity().getResources().getString(R.string.whatFeedbackWouldYouLikeToProvide) + "\n\n" +
mMessage.getText().toString();
File toSend = new File(outfile);
if(toSend.exists()) {
Log.e("Feedback", "File path: " + toSend.getAbsolutePath());
Intent emailIntent = new Intent(android.content.Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto:" +email));
emailIntent.putExtra(android.content.Intent.EXTRA_STREAM, Uri.fromFile(toSend));
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, content);
/* Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("message/rfc822");
emailIntent.putExtra(Intent.EXTRA_EMAIL , new String[]{email}); …Run Code Online (Sandbox Code Playgroud) 我想通过Facebook其他社交媒体(Google+,Twitter,...)分享一个简单的文字
我的初始代码看起来像:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Test Subject");
shareIntent.putExtra(Intent.EXTRA_TITLE, "Test Title");
shareIntent.putExtra(Intent.EXTRA_TEXT, "Only link visible in FB: http://www.google.com/");
startActivity(Intent.createChooser(shareIntent, "Test Intent"));
Run Code Online (Sandbox Code Playgroud)
如果我没有弄错的话,Facebook允许我只分享指定的链接(或某种网站的摘录)EXTRA_TEXT.
虽然共享链接很好,但我也希望与它共享自定义文本,因此我将我的项目链接到facebook SDK并设法创建更多自定义共享体验.然而,由于分享到Facebook它不再通过Intent完成,我丢失了我Intent.createChooser向用户展示众所周知的共享选项列表.
我的问题是我可以使用默认值Intent.createChooser但在Facebook图标选择中使用自定义共享吗?如果没有,那么其他选择是什么?
谢谢!
我想打开一个文件android.我想要做的是如果文件是类型Image然后我想打开Intent Chooser其中包含可以查看图像的应用程序,如果它是视频类型,然后打开与可以查看视频的应用程序的Intent Chooser.我怎样才能实现这一目标?
我只需通过Tweet分享图片.
这是我的代码
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("image/*");
if (mInsertableToGallery) {
mInsertableToGallery = false;
mInsertedImagePath = MediaStore.Images.Media.insertImage(getContentResolver(), mShareImage,
getResources().getString(R.string.app_name) + System.currentTimeMillis(), getResources().getString(R.string.app_name));
}
// share only 5 specific apps:
List<Intent> targetedShareIntents = new ArrayList<>();
List<ResolveInfo> resInfos = getPackageManager().queryIntentActivities(shareIntent, 0);
if (!resInfos.isEmpty()) {
for (ResolveInfo resolveInfo : resInfos) {
String packageName = resolveInfo.activityInfo.packageName;
Intent targetedShareIntent = new Intent(Intent.ACTION_SEND);
targetedShareIntent.setType("image/*");
targetedShareIntent.setPackage(packageName);
targetedShareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(mInsertedImagePath));
if (TextUtils.equals(packageName, "com.facebook.katana") //fb
||TextUtils.equals(packageName, "com.instagram.android") //instagram
||TextUtils.equals(packageName, "jp.naver.line.android") //line
||TextUtils.equals(packageName, "com.google.android.apps.plus") // plus
||TextUtils.equals(packageName, "com.twitter.android")) // twitter
{ …Run Code Online (Sandbox Code Playgroud) 在Android KitKat版本之后,我们可以通过"Telephony.sms.getDefaultSmsPackage(context);"找到默认的sms包名.但是如何在KitKat版本之前获得包名?
我们有一个应用程序可以启动SENDTO的活动,目的是让用户发送电子邮件.所有各种电子邮件应用程序的选择都很好,但我们希望将来绕过该步骤让用户...例如,在选择器的底部添加"记住此决定"按钮.从那时起,我们将启动该特定活动而不是获取选择器.
我想知道我们是否可以在较低级别与内置的创建选择器功能进行交互以影响这一点.如果没有,有人可以指向/发布一些代码片段吗?我想诀窍是了解如何获得可以处理意图的活动列表.
谢谢.