0

2 つのアプリケーションがあり、データ (テキストと画像) を互いに共有する必要があります。テキストを変更した後に画像を変更する場合 (テキストを入力した後に写真をアップロードするか、テキストを入力した後に画像を再アップロードする) を除いて、すべて正常に機能します。2 番目のアプリケーションで画像が更新されません。ImageView の TextWatcher のようなものが必要です。何か案は ?

私の最初のアプリケーションの重要な部分は次のとおりです。

ウリ 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;

    }

}

そして、ここにデータを共有する 2 番目のアプリケーションがあります。

@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);
    }
}
4

2 に答える 2

0

そうすることが愚かで、さらに問題を引き起こす可能性があるかどうかはわかりませんが、現在は完全に正常に機能しています. これが悪い考えだと思う人がいたら、その理由を教えてください。これは私がやったことです:

  1. shareIntent を Global として宣言しました。
  2. 新しい写真をアップロードした後も imageUrl をインテントに入れました
  3. imageUrl を afterTextChanged() 関数のインテントに入れたので、テキストを変更するたびに、新しい imageUri も設​​定されます。
于 2016-03-28T09:32:02.683 に答える
0

初めて別のアプリケーションに画像をアップロードするとき、最初のアプリケーションから別のアプリケーションへの 2 回目の画像呼び出しの後、2 番目のアプリケーションで onCreate メソッドを初めて呼び出すとき、2 番目のアプリケーションが既に作成されている場合、その時間は onCrete を呼び出さないため、onResume メソッドの方が適しています。あなたのために。

于 2016-03-28T06:39:44.630 に答える