当从mainactivity传递数据到childactivity时,在childactivity中获得intent后不要立即获取数据,而应该检测获取到的Intent中是否还有数据,如下:
public class ChildActivity extends AppCompatActivity { /* Field to store our TextView */ private TextView mDisplayText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_child); /* Typical usage of findViewById... */ mDisplayText = (TextView) findViewById(R.id.tv_display); Intent intent = getIntent(); if(intent.hasExtra(Intent.EXTRA_TEXT)){ String stringExtra = intent.getStringExtra(Intent.EXTRA_TEXT); mDisplayText.setText(stringExtra); } } }
隐式intent在调用startActivity之前应该首先判断是否包含有打开该隐式Intent的可用软件,如下:
private void showMap(Uri mapUri){ Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(mapUri); if(intent.resolveActivity(getPackageManager()) != null){ startActivity(intent); } }
private void shareText(String shareString){ String mimeType = "text/plain"; String title = "Share your interests"; ShareCompat.IntentBuilder intentBuilder = ShareCompat.IntentBuilder.from(this) .setChooserTitle(title) .setType(mimeType) .setText(shareString); Intent intent = intentBuilder.getIntent(); if(intent.resolveActivity(getPackageManager()) != null){ startActivity(intent); } }
public void onClickShareTextButton(View v) { String shareToString = "hello everyone, i am here waiting for you!"; shareText(shareToString); }