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