2013-10-29 18 views
6

Bir ShareActionProvider menü öğesinin onClick olayını nasıl alabilirim?İş Ortağı ShareActionProvider onClick olay

Uygulamam bir galeride (imageView ile parçalar) bazı resimleri gösterir ve geçerli resmi önbellekten yüklemek, bir geçici dosya oluşturmak ve paylaşmak için onClick olayını almam gerekir.

payım düğmesi:

<item android:id="@+id/menu_item_share" 
    android:showAsAction="ifRoom" 
    android:title="@string/menu_share" 
    android:actionProviderClass="android.widget.ShareActionProvider" /> 

denedim:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     NavUtils.navigateUpFromSameTask(this); 
     return true; 
    case R.id.manage_keywords: 
     startActivity(new Intent(this, KeywordActivity.class)); 
     return true; 
    case R.id.menu_item_share: 
     /*it should handle share option*/ 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

Ve

menuShare = menu.findItem(R.id.menu_item_share); 
    menuShare.setOnActionExpandListener(new OnActionExpandListener() { 

     @Override 
     public boolean onMenuItemActionExpand(MenuItem item) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) { 
      // TODO Auto-generated method stub 
      return false; 
     } 
    }); 

Başka bir öneri ?? Teşekkürler!

cevap

0

bunu kontrol değil, ama bunun yerine

+0

işe yaramadı ... menuShare = menu.findItem (R.id.menu_item_share); \t \t menuShare.setOnMenuItemClickListener (yeni OnMenuItemClickListener() { \t \t \t \t \t \t @Override \t \t \t kamu boolean onMenuItemClick (Menuıtem item) { \t \t \t \t/* burada durmalı */ \t \t \t \t döndürme yanlışı; \t \t \t} \t \t}); –

1

Sizin önerilen akış ShareActionProvider tarafından desteklenmemektedir OnMenuItemClickListener olayı çalışacaktı. Çatarak ya da başka bir paylaşım çözümü bulmalısın. Hedefi paylaşmak kullanıcının seçimine dayalı değiştirmek için gereken ilk etapta ShareActionProvider ile uygun Intent kullanabilir ve böylece

Ya da daha iyisi, görüntüyü hizmet edebilir bir ContentProvider uygulamak. Kendi ContentProvider'u kullanarak, muhtemelen geçici dosyadan kaçınabilirsiniz. Resimlerinizin nerede saklandığına bağlı olarak, FileProvider may be sufficient for your needs. O

mShareActionProvider = (ShareActionProvider) menuItemShare.getActionProvider(); 
mShareActionProvider.setOnShareTargetSelectedListener(new OnShareTargetSelectedListener() { 
     @Override 
     public boolean onShareTargetSelected(ShareActionProvider actionProvider, Intent intent) { 
      return false; 
     } 
    }); 

Yani diğer bir çözüm olacaktır:

0

Sen (siz burada itent değiştirmeye izin verilmez) ShareActionProvider ait OnShareTargetSelectedListenener kullanmak ve sonra niyet orada resim ekleyebilir

mShareActionProvider.setShareIntent(createIntentForCurrentImage()); 
8

kaydet her seferinde sDCard ShareActionProvider kullanıcı tıklayın paylaşmak istediğiniz görüntü, tam bir örnek: geçerli imajını değiştirmek ne zaman niyet güncellemek

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getSupportMenuInflater().inflate(R.menu.menu, menu); 

    ShareActionProvider shareActionProvider = (ShareActionProvider) menu.findItem(R.id.shareactionprovider).getActionProvider(); 
    shareActionProvider.setShareIntent(getShareIntent()); 
    shareActionProvider.setOnShareTargetSelectedListener(new OnShareTargetSelectedListener() { 
     @Override 
     public boolean onShareTargetSelected(ShareActionProvider actionProvider, Intent intent) { 
      saveImageToSD(); 
      return false; 
     } 
    }); 

    return true; 
} 




private Intent getShareIntent() { 
    Intent shareIntent = new Intent(Intent.ACTION_SEND); 

    File sdCard = Environment.getExternalStorageDirectory(); 

    File sharedFile = new File(sdCard+"/yourPath/yourImage.jpg"); 
    Uri uri = Uri.fromFile(sharedFile); 

    shareIntent.setType("image/*"); 
    shareIntent.putExtra(Intent.EXTRA_STREAM, uri); 
    return shareIntent; 
} 


private void saveImageToSD() { 

    Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.yourimage); 

    OutputStream outStream = null; 
    try { 
     outStream = new FileOutputStream(getTempFile()); 
     bm.compress(Bitmap.CompressFormat.PNG, 100, outStream); 
     outStream.flush(); 
     outStream.close(); 
     bm.recycle(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

private File getTempFile() { 

    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 

     File directory = new File(Environment.getExternalStorageDirectory() + "/yourPath/"); 
     directory.mkdirs(); 

     File file = new File(directory ,"yourImage.jpg"); 

     try { 
      file.createNewFile(); 
     } catch (IOException e) {} 

     return file; 
    } else { 
     return null; 
    } 
} 
+1

Bu işe yaradı !!!! –

İlgili konular