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();

>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值