2015-10-20 99 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; 
}