0

我有两个应用程序,我需要共享数据(文本和图像)从一个到另一个。一切正常,除非在更改文本后更改图像(我在输入文本后上传照片,或者在输入文本后重新上传图像),则我的图像不会在第二个应用程序中更新。我需要像TextWatcher这样的ImageView。有任何想法吗 ?Android:更新图像Uri的意图ShareActionProvider

这里是我第一次申请的重要部分:

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

在意图设置图像URI并设置onActivityResult时设置日志。 –