gpt4 book ai didi

android - 如何将 "copy to clipboard"添加到自定义 Intent Chooser?

转载 作者:太空宇宙 更新时间:2023-11-03 11:34:49 24 4
gpt4 key购买 nike

According to this solution ,我想在自定义共享对话框中添加“复制到剪贴板”操作 - 与默认操作共享提供程序中的相同。

enter image description here

我尝试的是在 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));
}

整个代码使用自https://stackoverflow.com/a/18068122/619673 .

adb shell pm list packages 返回包名列表但没有这个短语。

我能否以某种方式获取剪贴板的包名以将其添加到我的自定义共享提供程序列表中?

这是一个带有“复制到剪贴板”选项的示例:

enter image description here

最佳答案

诀窍在于实际上没有用于剪贴板的内置包(某些应用通过使用适当的 intent-filter 创建这样的包来提供系统范围内的复制到剪贴板选项)。

但是,由于您是手动创建选择器的选项,您可以添加您自己的 Intent 来处理复制到剪贴板操作。例如,像这样:

... create the intentList, as before ...

// Add a custom intent to handle the "copy to clipboard" option.
Intent copyToClipboard = new Intent(this, ShareToClipboardActivity.class);
copyToClipboard.putExtra(Intent.EXTRA_TEXT, "text to copy to clipboard");

// Wrap it with a LabeledIntent and add it to the list of choosable ones.
LabeledIntent labeledCopyToClipboard = new LabeledIntent(copyToClipboard, getPackageName(), "Copy!", 0);
intentList.add(labeledCopyToClipboard);

... convert intentList to array and show chooser, as before ...

ShareToClipboardActivity 是您自己的 Activity ,它(至少)这样做:

public class ShareToClipboardActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

CharSequence text = getIntent().getCharSequenceExtra(Intent.EXTRA_TEXT);
ClipboardManager clipboardManager = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
clipboardManager.setPrimaryClip(ClipData.newPlainText(null, text));
finish();
}
}

请注意,这是一个简单的示例:您可能需要 LabeledIntent 的可绘制资源和字符串资源,并且可能需要在 ShareToClipboardActivity 中显示 Toast 消息,如果目标是 API 11 之前的版本,则使用旧的 ClipboardManager

关于android - 如何将 "copy to clipboard"添加到自定义 Intent Chooser?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24737622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com