0

У меня есть два приложения, и мне нужно обмениваться данными (текстом и изображением) от одного к другому. Все работает отлично, за исключением того, что если я изменяю изображение после изменения текста (я загружаю фотографию после ввода текста или повторно загружаю изображение после ввода текста), мое изображение не обновляется во втором приложении. Мне нужно что-то вроде TextWatcher для ImageView. Есть идеи ?Android: обновить изображение Uri в намерении ShareActionProvider

Вот важные части моего 1-го применения:

Uri imageUri;

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

     @Override 
     public void afterTextChanged(Editable s) { 
      if (mShareActionProvider != null) { 
       mShareActionProvider.setShareIntent(setShareIntent()); 
      } 
     } 
    }); 
} 

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

    MenuItem share = menu.findItem(R.id.menu_item_share); 

    mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(share); 
    mShareActionProvider.setShareIntent(setShareIntent()); 
    invalidateOptionsMenu(); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    setMessageIntent(); 
    return super.onOptionsItemSelected(item); 
} 

private Intent setShareIntent() { 
    String share = message.getText().toString(); 
    Intent shareIntent = new Intent(Intent.ACTION_SEND); 

    shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri); 
    if (imageUri != null) { 
     shareIntent.setType("image/png"); 
    } else { 
     shareIntent.setType("text/plain"); 
    } 
    shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Here goes my sharing"); 
    shareIntent.putExtra(Intent.EXTRA_TEXT, share); 
    return shareIntent; 
} 

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

       imageUri = data.getData(); 
       String[] path = {MediaStore.Images.Media.DATA}; 
       Cursor cursor = getContentResolver().query(imageUri, path, null, null, null); 
       cursor.moveToFirst(); 
       int index = cursor.getColumnIndex(path[0]); 
       String imgString = cursor.getString(index); 
       image.setImageURI(imageUri); 
       break; 

    } 

} 

А вот моя вторая заявка, где я разделяю данные:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    Intent receiver = getIntent(); 
    String received_text = receiver.getStringExtra(receiver.EXTRA_TEXT); 

    Uri imageUri = (Uri) receiver.getParcelableExtra(Intent.EXTRA_STREAM); 
    if (imageUri != null) { 
     Bitmap bitmap = null; 
     try { 
      bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     image.setImageBitmap(bitmap); 

    } 
    if (received_text != null) { 
     text.setText(received_text); 
    } 
} 

ответ

0

Я не знаю, было ли это глупо и может вызвать проблемы в дальнейшем, но сейчас это прекрасно работает. Если кто-нибудь подумает, что это плохая идея, скажите мне, пожалуйста, пожалуйста. Это то, что я сделал:

  1. Я объявлял shareIntent глобальным.
  2. Я положил imageUrl в намерениях и после загрузки новой фотографии
  3. Я поставил imageUrl в намерении в функции afterTextChanged(), поэтому каждый раз, когда я меняю свой текст, будет установлен и мой новый imageUri.
0

когда первый раз загружать изображения на другое приложение, его время OnCreate метод первый раз вызов во втором приложении после вас во второй раз вызов изображения из первого приложения в другое в тот момент, если второе приложение уже создано, что время не вызывает onCrete, поэтому его лучше для метода onResume для вас.

+0

проблема в моем первом приложении, потому что imageUrl не изменяется. он изменяется только тогда, когда я меняю текст, потому что я установил намерение в ShareActionProvider, а также в OnCreateOptionMenu. – Astgh

+0

set Log, когда вы устанавливаете URI изображения в намерении, а также onActivityResult. –

Смежные вопросы