2013-10-01 21 views
8

Próbuję dodać obraz do mojego intencji akcji twitter. Zapisuję obraz lokalnie w jednej klasie, a następnie w innym uzyskuję obraz i próbuję przywiązać się do mojego zamiaru.dodaj zdjęcie do twitter udostępnij intent android

Oto mój kod

private void shareTwitter(){ 

    try { 

     FileInputStream fis; 
     fis = getActivity().openFileInput("photo.jpg"); 
     Bitmap shot = BitmapFactory.decodeStream(fis); 
     File file = new File(MapView.path, "snapshot.jpg"); 
     if(file.exists()){ 
      Log.i("FILE", "YES"); 
     }else{ 
      Log.i("FILE", "NO"); 
     } 
     Uri uri = Uri.parse(file.getAbsolutePath()); 
     //Uri uri = Uri.parse("android.resource://com.gobaby.app/drawable/back");    
      Intent intent = new Intent(Intent.ACTION_SEND); 
      intent.setType("/*"); 
      intent.setClassName("com.twitter.android", "com.twitter.android.PostActivity"); 
      intent.putExtra(Intent.EXTRA_TEXT, "Thiws is a share message"); 
      intent.putExtra(Intent.EXTRA_STREAM, uri); 
      startActivity(intent);    

    } catch (final ActivityNotFoundException e) { 
     Toast.makeText(getActivity(), "You don't seem to have twitter installed on this device", Toast.LENGTH_SHORT).show(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

W tej chwili nie jest wyjątkiem w moim LogCat moja aplikacja wyświetla tylko toast mówiąc obraz nie udało się załadować.

Proszę, co robię źle?

+0

Run przez 'debug run' krok po kroku i sprawdź swoje zmienne. –

+0

której zmiennej powinienem sprawdzić? na początek czy to właściwe podejście? Sprawdziłem, czy plik został znaleziony i tak jest. –

+0

Czy udało ci się zapisać coś na twitterze? –

Odpowiedz

10

To jest to, czego potrzebujesz

intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file); 
+0

Wielkie dzięki. Działa dobrze teraz –

+1

mam już aplikację twitter, potem też ją złapię ** "Wygląda na to, że nie masz zainstalowanego twittera na tym urządzeniu" ** –

7

Może to być pomocne dla kogoś:

private void sendShareTwit() { 
    try { 
     Intent tweetIntent = new Intent(Intent.ACTION_SEND); 

     String filename = "twitter_image.jpg"; 
     File imageFile = new File(Environment.getExternalStorageDirectory(), filename); 

     tweetIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.twitter_share_text)); 
     tweetIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(imageFile)); 
     tweetIntent.setType("image/jpeg"); 
     PackageManager pm = getActivity().getPackageManager(); 
     List<ResolveInfo> lract = pm.queryIntentActivities(tweetIntent, PackageManager.MATCH_DEFAULT_ONLY); 
     boolean resolved = false; 
     for (ResolveInfo ri : lract) { 
      if (ri.activityInfo.name.contains("twitter")) { 
       tweetIntent.setClassName(ri.activityInfo.packageName, 
         ri.activityInfo.name); 
       resolved = true; 
       break; 
      } 
     } 

     startActivity(resolved ? 
       tweetIntent : 
       Intent.createChooser(tweetIntent, "Choose one")); 
    } catch (final ActivityNotFoundException e) { 
     Toast.makeText(getActivity(), "You don't seem to have twitter installed on this device", Toast.LENGTH_SHORT).show(); 
    } 
} 
+0

weldone @agamov działa dobrze –

1

można pobrać pełny kod źródłowy here

Bitmap b =BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher); 
Intent share = new Intent(Intent.ACTION_SEND); 
share.setType(“image/jpeg”); 
ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
b.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
String path = MediaStore.Images.Media.insertImage(getContentResolver(), b, “Title”, null); 
Uri imageUri = Uri.parse(path); 
share.putExtra(Intent.EXTRA_STREAM, imageUri); 
startActivity(Intent.createChooser(share, “Select”));