第十五章 隐式intent
发送隐式Intent的部分 应用的AndroidManifest文件中的部分(作为响应)
发送隐式Intent
Intent i = new Intent ( Intent. ACTION_SEND) ;
i. setType ( "text/plain" ) ;
i. putExtra ( Intent. EXTRA_TEXT, getCrimeReport ( ) ) ;
i. putExtra ( Intent. EXTRA_SUBJECT,
getString ( R. string. crime_report_subject) ) ;
i = Intent. createChooser ( i, getString ( R. string. send_report) ) ;
startActivity ( i) ;
Intent pickContact = new Intent ( Intent. ACTION_PICK,
ContactsContract. Contacts. CONTENT_URI) ;
AndroidManifest文件中的部分
< activity android: name= " .CrimeListActivity" >
< intent-filter>
< action android: name= " android.intent.action.MAIN" />
< category android: name= " android.intent.category.LAUNCHER" />
</ intent-filter>
</ activity>
获取联系人数据
利用startActivityForResult(Intent, int )
来发送Intent
startActivityForResult ( pickContact, REQUEST_CONTACT) ;
利用onActivityResult(int, int, Intent)
处理、获取数据
public void onActivityResult ( int requestCode, int resultCode, Intent data) {
if ( resultCode != Activity. RESULT_OK) {
return ;
}
if ( requestCode == REQUEST_CONTACT && data != null) {
Uri contactUri = data. getData ( ) ;
String[ ] queryFields = new String [ ] {
ContactsContract. Contacts. DISPLAY_NAME
} ;
Cursor c = getActivity ( ) . getContentResolver ( )
. query ( contactUri, queryFields, null, null, null) ;
try {
if ( c. getCount ( ) == 0 ) {
return ;
}
c. moveToFirst ( ) ;
String suspect = c. getString ( 0 ) ;
mCrime. setSuspect ( suspect) ;
mSuspectButton. setText ( suspect) ;
} finally {
c. close ( ) ;
}
}
}
相关小记
如果操作系统找不到匹配的activity,应用就会崩溃。故需要自检
PackageManager packageManager = getActivity ( ) . getPackageManager ( ) ;
if ( packageManager. resolveActivity ( pickContact,
PackageManager. MATCH_DEFAULT_ONLY) == null) {
mSuspectButton. setEnabled ( false ) ;
}
显示Intent也可以使用隐式Intent的操作和数据部分。相当于要求特定的activity去做特定的事。
挑战练习
利用ShareCompat类中的IntentBuilder优化应用。
ShareCompat. IntentBuilder intentBuilder = ShareCompat. IntentBuilder
. from ( getActivity ( ) )
. setType ( "text/plain" )
. setText ( getCrimeReport ( ) )
. setSubject ( getString ( R. string. crime_report_subject) )
. setChooserTitle ( R. string. send_report) ;
intentBuilder. createChooserIntent ( ) ;
intentBuilder. startChooser ( ) ;