与自定义意图列表共享数据显示 Android 系统
Sharing data with custom list of intent display an Android System
我尝试仅通过 facebook、twitter 和 g+ 共享一些数据,因此我创建了一个自定义的意图列表,我可以发送一些文本,一切正常。
但是我在推特上遇到了显示问题,见下文
你可以看到这个系统 Android 如果我点击它,我会得到这个:
查看代码:
在第一个函数中,我只是放入了我想使用的包
private List<String> getShareApplication(){
List<String> mList=new ArrayList<>();
mList.add("com.facebook.katana");
mList.add("com.google.android.apps.plus");
mList.add("com.twitter.android");
return mList;
}
在这一个中,我使用上面的列表,我在循环中查看包是否存在于我的 phone 上,我创建一个带有 ACTION_SEND 的 Intent 调用 targetedShare 并放置里面有一些文字,最后将它添加到 targetedShareIntents 列表
private void Share(List<String> PackageName) {
List<Intent> targetedShareIntents = new ArrayList<>();
Intent share = new Intent(android.content.Intent.ACTION_SEND);
share.setType("text/plain");
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 (PackageName.contains(info.activityInfo.packageName.toLowerCase())) {
targetedShare.setType("text/plain");
targetedShare.putExtra(Intent.EXTRA_TEXT, String.valueOf(urlJson));
targetedShare.setPackage(info.activityInfo.packageName.toLowerCase());
targetedShareIntents.add(targetedShare);
}
}
Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Share");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[targetedShareIntents.size()]));
startActivity(chooserIntent);
}
}
}
我尝试使用在 Whosebug 上找到的一些其他代码,我尝试使用其他设备,我尝试使用其他一些 Twitter 包名称,例如:
com.twitter.android.composer.ComposerActivity
com.twitter.android.DMActivity
com.twitter.android.PostActivity
等...
但我仍然遇到这个问题
如果有人遇到这个问题,我找到了解决方案,您需要使用此功能在 Intent 列表中单独添加 twitter :
public Intent findTwitterClient() {
final String[] twitterApps = {
"com.twitter.android",
"com.twidroid",
"com.handmark.tweetcaster",
"com.thedeck.android" };
Intent tweetIntent = new Intent();
tweetIntent.setType("text/plain");
final PackageManager packageManager = getPackageManager();
List<ResolveInfo> list = packageManager.queryIntentActivities(
tweetIntent, PackageManager.MATCH_DEFAULT_ONLY);
for (int i = 0; i < twitterApps.length; i++) {
for (ResolveInfo resolveInfo : list) {
String p = resolveInfo.activityInfo.packageName;
if (p != null && p.startsWith(twitterApps[i])) {
tweetIntent.setPackage(p);
return tweetIntent;
}
}
}
return null;
}
你可以这样使用它:
targetedShareIntents.add(findTwitterClient());
我尝试仅通过 facebook、twitter 和 g+ 共享一些数据,因此我创建了一个自定义的意图列表,我可以发送一些文本,一切正常。
但是我在推特上遇到了显示问题,见下文
你可以看到这个系统 Android 如果我点击它,我会得到这个:
查看代码:
在第一个函数中,我只是放入了我想使用的包
private List<String> getShareApplication(){
List<String> mList=new ArrayList<>();
mList.add("com.facebook.katana");
mList.add("com.google.android.apps.plus");
mList.add("com.twitter.android");
return mList;
}
在这一个中,我使用上面的列表,我在循环中查看包是否存在于我的 phone 上,我创建一个带有 ACTION_SEND 的 Intent 调用 targetedShare 并放置里面有一些文字,最后将它添加到 targetedShareIntents 列表
private void Share(List<String> PackageName) {
List<Intent> targetedShareIntents = new ArrayList<>();
Intent share = new Intent(android.content.Intent.ACTION_SEND);
share.setType("text/plain");
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 (PackageName.contains(info.activityInfo.packageName.toLowerCase())) {
targetedShare.setType("text/plain");
targetedShare.putExtra(Intent.EXTRA_TEXT, String.valueOf(urlJson));
targetedShare.setPackage(info.activityInfo.packageName.toLowerCase());
targetedShareIntents.add(targetedShare);
}
}
Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Share");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[targetedShareIntents.size()]));
startActivity(chooserIntent);
}
}
}
我尝试使用在 Whosebug 上找到的一些其他代码,我尝试使用其他设备,我尝试使用其他一些 Twitter 包名称,例如:
com.twitter.android.composer.ComposerActivity
com.twitter.android.DMActivity
com.twitter.android.PostActivity
等...
但我仍然遇到这个问题
如果有人遇到这个问题,我找到了解决方案,您需要使用此功能在 Intent 列表中单独添加 twitter :
public Intent findTwitterClient() {
final String[] twitterApps = {
"com.twitter.android",
"com.twidroid",
"com.handmark.tweetcaster",
"com.thedeck.android" };
Intent tweetIntent = new Intent();
tweetIntent.setType("text/plain");
final PackageManager packageManager = getPackageManager();
List<ResolveInfo> list = packageManager.queryIntentActivities(
tweetIntent, PackageManager.MATCH_DEFAULT_ONLY);
for (int i = 0; i < twitterApps.length; i++) {
for (ResolveInfo resolveInfo : list) {
String p = resolveInfo.activityInfo.packageName;
if (p != null && p.startsWith(twitterApps[i])) {
tweetIntent.setPackage(p);
return tweetIntent;
}
}
}
return null;
}
你可以这样使用它: targetedShareIntents.add(findTwitterClient());