Activity之间的交互"/>
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 numbersstartActivityForResult(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();
>
更多推荐
Activity之间的交互
发布评论