Activity之間的交互

一、不同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();

>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章