4

在我正在处理的应用程序中,我需要知道用户用来共享内容以记录日志的“ACTION_SEND sharer”(Twitter,Facebook,SMS,Email ...)它用于统计目的。无论如何要这样做?检测用于共享某些内容的共享者

我有一些想法,其中之一是修改这些共享者的目标意图指向一个接收者意图,将收到共享者选择,做任何我们需要的数据,然后调用目标的最终目标分享者(推特,脸书,短信,电子邮件......)。对于最后一步,我想我需要知道每个目标应用程序的共享Action。

问候

UPDATE1

要ilustrate,我分享我目前使用共享内容,定制根据目标共享资源的意图额外的方法:

private void shareItem(String title, String link) { 
    // Standard message to send 
    String msg = title + " " + link; 

    Intent share = new Intent(Intent.ACTION_SEND); 
    share.setType("text/plain"); 

    List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(share, 0); 
    if (!resInfo.isEmpty()) { 
     List<Intent> targetedShareIntents = new ArrayList<Intent>(); 
     Intent targetedShareIntent = null; 

     for (ResolveInfo resolveInfo : resInfo) { 
      String packageName = resolveInfo.activityInfo.packageName; 
      targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND); 
      targetedShareIntent.setType("text/plain"); 

      // Find twitter: com.twitter.android... 
      if ("com.twitter.android".equals(packageName)) { 
       targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, msg); 
      } else if ("com.google.android.gm".equals(packageName)) { 
       targetedShareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, title); 
       targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, Uri.encode(title + "\r\n" + link)); 
      } else if ("com.android.email".equals(packageName)) { 
       targetedShareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, title); 
       targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, Uri.encode(title + "\n" + link)); 
      } else { 
       // Rest of Apps 
       targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, msg); 
      } 

      targetedShareIntent.setPackage(packageName); 
      targetedShareIntents.add(targetedShareIntent); 
     } 

     Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), getResources().getString(R.string.share)); 
     chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[] {})); 
     startActivityForResult(chooserIntent, 0); 
    } 
} 

已解答

有关指示s在这个链接:http://goo.gl/hf8Kg

+0

你能否解释这是什么 - R.string.share包含? –

+1

@Basim Sherif这只是一个资源字符串,其中包含对话框标题(类似“与...共享”)。 – jihonrado

回答

1

有没有办法做到这一点?

您可以通过PackageManagerqueryIntentActivities()显示您自己的选择器对话框。

+0

是的,我目前正在使用queryIntentActivities()来创建我自己的选择器对话框来定制共享者的Intent附加组件(例如,如果它是Twitter共享者或电子邮件共享者,我会添加不同的附加组件),但是我需要的是类似于“回调”或某种“拦截”(这是我现在正在调查的)来知道用户使用了什么共享器。感谢你的回答! – jihonrado

+0

@jihonrado:我看不出你的方法如何工作。我所建议的是,你显示**你自己的对话框**,其中**你**是填充对话框的人,** **是当用户点击对话框中的某些东西时获得控制权的人。此时,**你**将负责启动所选活动,并记录用户的选择。 – CommonsWare

+0

问题用ilustrative代码更新。我想要做的是修改这个发送意图到一个自定义的中间接收器,做一些数据,然后根据额外的值(例如sharer = twitter,sharer = email ...),调用一个新的意图直接Twitter应用程序,电子邮件应用程序...我不知道这是可能的。 – jihonrado