2015-10-20 74 views
5

我需要通過Tweet才能分享圖片。Android共享意圖Twitter:如何僅通過Tweet或Direct Message共享?

這裏是我的代碼

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 
      { 
       targetedShareIntents.add(targetedShareIntent); 
      } 

      } 
     } 
     Intent chooser = Intent.createChooser(targetedShareIntents.remove(0), ""); 
     chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{})); 
     startActivity(chooser); 

和我得到的結果是: share only via 5 apps

當點擊 「Android系統」,微博分享彈出: share Twitter

我想要什麼:

  1. 如何通過Twitter或直接信息通過Twitter分享?

  2. 如何更改標題&共享項目的圖標。前Twitter分享項目從「Android系統」到「Tweet」?

+0

這裏有同樣的問題。驚訝的是,沒有更多的upvotes。你能解決這個問題嗎? – treesAreEverywhere

+0

對不起,我無法完成:( –

回答

4

我無法設法將Tweet和直接消息都發送到前臺,但以下代碼將爲您帶來任意一個。實際上,你可以將兩者都置於前面,但兩者都以同名的「Tweet」出現,因此它不可用。 我還包括Facebook,insta和tumblr。 要獲得直接信息取代推文取代com.twitter.android.composer.ComposerActivitycom.twitter.android.DMActivity。要同時爲DMActivity添加另一個'if'。

不能肯定地說,但我不認爲你可以改變你的應用程序包的圖標。

List<Intent> targetedShareIntents = new ArrayList<Intent>(); 
     Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); 
     shareIntent.setType("image/jpeg");//("text/plain"); 
     Uri uri = Uri.fromFile(outFile); 
     shareIntent.putExtra(Intent.EXTRA_STREAM, uri); 
     List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(shareIntent, 0); 
     for (ResolveInfo resolveInfo : resInfo) { 
      String packageName = resolveInfo.activityInfo.packageName; 
      Intent targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND); 
      targetedShareIntent.setType("image/jpeg"); 
      targetedShareIntent.putExtra(Intent.EXTRA_STREAM, uri); 
      if(TextUtils.equals(packageName,"com.facebook.katana")|TextUtils.equals(packageName,"com.instagram.android") 
        |TextUtils.equals(packageName,"com.tumblr")) { 
       targetedShareIntent.setPackage(packageName); 
       targetedShareIntents.add(targetedShareIntent); 
      } 
      if(TextUtils.equals(resolveInfo.activityInfo.name,"com.twitter.android.composer.ComposerActivity")) { 
       targetedShareIntent.setPackage(packageName); 
       targetedShareIntent.setClassName(
         resolveInfo.activityInfo.packageName, 
         resolveInfo.activityInfo.name); 
       targetedShareIntents.add(targetedShareIntent); 
      } 
     } 
     Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Select app to share"); 
     chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{})); 
     startActivity(chooserIntent); 
0

對於撰寫新鳴叫:

public static Intent getTwitterShareIntent(Context context) { 
    Intent shareIntent = new Intent(Intent.ACTION_SEND); 
    shareIntent.setType("text/plain"); 
    shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    shareIntent.setClassName("com.twitter.android", 
      "com.twitter.composer.ComposerShareActivity"); 
    return shareIntent; 
}