一、不同App直接Activity的調用
1、當不同的App直接進行調用Intent的聲明需要隱式聲明
2、在調用之前需要檢查是否有App能夠接收否則會引起Crash
PackageManager packageManager = getPackageManager();
List activities = packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
boolean isIntentSafe = activities.size() > 0;
3、當有多個滿足條件的Intent出現時,回跳出列表供用戶選擇。若用戶選擇後則一直使用那個Intent進行接收
4、若App需要每次用戶都進行選擇(如:分享)則需要創建IntentChooser來建立
Intent chooser = Intent.createChooser(intent, title);
二、獲取調用Activity的返回結果
1、當從Activity返回結果是會回調onActivityResult()方法。想要獲取相應數據首先要檢查RequestCode
再檢查ResultCode,再獲取數據
2、如何讀取聯繫人
private void pickContact() {
Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts");
pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PICK_CONTACT_REQUEST) {
if (resultCode == RESULT_OK) {
Uri contactUri = data.getData();
String[] projection = {Phone.NUMBER};
// Consider using CursorLoader to perform the query.
Cursor cursor = getContentResolver().query(contactUri, projection, null, null, null);
cursor.moveToFirst();
int column = cursor.getColumnIndex(Phone.NUMBER);
String number = cursor.getString(column);
}
}
}
三、被調用的Activity如何返回結果
1、當其他Activity調用的時候被調用的Actvity要定義IntentFilter來相應的Activity
1)定義Action action爲字符串,調用者必須設置Action
2) 定義Data data通常分爲兩部分 一部分爲uri 二部分爲MIMType。 可以不定義,也可以指定義一部分
3)定義Category 當Activity定義了Action的時候必須顯示的定義 一般爲android.intent.category.DEFAULT
<activity android:name="ShareActivity">
<!-- filter for sending text; accepts SENDTO action with sms URI schemes -->
<intent-filter>
<action android:name="android.intent.action.SENDTO"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="sms" />
<data android:scheme="smsto" />
</intent-filter>
<!-- filter for sending text or images; accepts SEND action and text or image data -->
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="image/*"/>
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
2、如何返回結果
Intent result = new Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri"));
setResult(Activity.RESULT_OK, result);
finish();
>