我们在开发中会遇到和其他应用的交互情形,下面是一个简单的方式。整个的使用类似“使用intent调用系统自带的拍照应用并获得结果”。

先看页面:

   

我们看看实现步骤。

第一个应用 DEMO1:

1.创建一个自定义的action, 使用intent发出

   String action = "zyf.demo.customAction";
Intent n = new Intent(action);

2.附件一些自定义的内容,使用putExtra

  n.putExtra("key1", "hello,这是来自demo1的消息。");

3.可以先检查是否有匹配这个action的内容。

            String action = "zyf.demo.customAction";
Intent n = new Intent(action); PackageManager packageManager = getBaseContext().getPackageManager();
final Intent intent = new Intent(action);
List<ResolveInfo> resolveInfo = packageManager
.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
if (resolveInfo.size() > 0) {
Toast.makeText(getBaseContext(), "找到了匹配的activity", 0).show();
}
else{
Toast.makeText(getBaseContext(), "未找到匹配的activity", 0).show();
}

4.使用 startActivityForResult 方法 启动Intent。

  startActivityForResult(n, REQUEST_CODE_1);

5.获得结果(来自DEMO2返回的)

        final int REQUEST_CODE_1 = 1;

	@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_1) {
String res = data.getStringExtra("result");
Toast.makeText(getBaseContext(), "收到:" + res, 0).show();
} else
super.onActivityResult(requestCode, resultCode, data);
}

  

第二个应用,DEMO2:

1.新建一个activity用于接收 “上面指定的action”,并在AndroidManifest.xml 文件中注册intent-filter。

      <activity
android:name="zyf.demo.demo2.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="zyf.demo.customAction"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>

2.在activity中可以显示来自DEMO1的数据。

    private void tryShowExtra() {
try {
Intent intent = getIntent();
String extra1 = intent.getStringExtra("key1");
txt1.setText(extra1);
} catch (Exception e) {
txt1.setText(e.getMessage());
} }

3.在activity中处理关闭当前应用时的返回内容

    public void onClick(View v){
Intent resultIntent = new Intent();
resultIntent.putExtra("result", "这是来自demo2的结果");
setResult(Activity.RESULT_OK, resultIntent);
this.finish();
}

至此,完成。演示代码下载

android开发(26) 和其他应用交换数据方式一,使用intent指定自定义action调用其他程序里的activity,并获得其返回的结果的更多相关文章

  1. android开发中的5种存储数据方式

    数据存储在开发中是使用最频繁的,根据不同的情况选择不同的存储数据方式对于提高开发效率很有帮助.下面笔者在主要介绍Android平台中实现数据存储的5种方式. 1.使用SharedPreferences ...

  2. Android DevArt4:IntentFilter学习及深入~问题描述:在不指定具体action前提下,如果有两个以上的Activity,具有完全相同的intent-filter,项目同步是否会出现异常?程序运行是否会崩溃?

    概述:GitHub IntentFilter意图过滤器,三种匹配规则:action.category.data 重点:过滤规则中必须设置 '<category android:name=&quo ...

  3. Android 开发:view的几种布局方式及实践

    View的几种布局显示方法,以后就不会在针对布局方面做过多的介绍.View的布局显示方式有下面几种:线性布局(Linear Layout).相对布局(Relative Layout).表格布局(Tab ...

  4. 【转】Android开发学习笔记:5大布局方式详解

    Android中常用的5大布局方式有以下几种: 线性布局(LinearLayout):按照垂直或者水平方向布局的组件. 帧布局(FrameLayout):组件从屏幕左上方布局组件. 表格布局(Tabl ...

  5. Android开发——View滑动的三种实现方式

    0. 前言   Android开发中,我们常常需要View滑动实现一些绚丽的效果来优化用户体验.一般View的滑动可以用三种方式实现. 转载请注明出处:http://blog.csdn.net/seu ...

  6. Android开发(二十四)——数据存储SharePreference、SQLite、File、ContentProvider

    Android提供以下四种存储方式: SharePreference SQLite File ContentProvider Android系统中数据基本都是私有的,一般存放在“data/data/程 ...

  7. Android开发笔记:SQLite导入导出数据

    SQLite是Android中最方便使用的数据库了,现在看下如何快速的在SQLite中导入导出数据. 首先由于是.NET项目转Android,原有数据库使用的是SQLSERVER,由于项目相同部分结构 ...

  8. Android开发之使用DefaultHandler处理XML数据

    一.定义规则 XML数据结构定义 请记住上面的定义,后面我会用“标签开始”.“文本”.“标签结束”表示SAX正在处理哪部分XML数据 事件模型 为什么这里我要谈到这个,因为SAX处理XML数据是采用事 ...

  9. android开发中难免遇到listview刷新数据出现异常

    异常:java.lang.IllegalStateException: The content of the adapter has changed but ListView did not rece ...

随机推荐

  1. Vivado抓取信号

    作者:桂. 时间:2018-05-03  21:16:03 链接:www.cnblogs.com/xingshansi/p/8987608.html 前言 FPGA调试需要抓取特定信号,一个直观的思路 ...

  2. Java数据结构和算法(六):前缀、中缀、后缀表达式

    前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...

  3. HTML常用标签(整理)

    超文本标记语言,即HTML(Hypertext Markup Language),是用于描述网页文档的一种标记语言.现在应用主流是HTML 4.01版本,发布于1999年,为W3C推荐标准.HTML ...

  4. Scala语言开发入门

    在本系列的第一篇文章 <使用递归的方式去思考>中,作者并没有首先介绍 Scala 的语法,这样做有两个原因:一是由于过多的陷入语法的细节其中,会分散读者的注意力.反而忽略了对于基本概念,基 ...

  5. 基于 vue 全家桶的 spa 项目脚手架

    项目简介 Github: https://github.com/hanan198501/vue-spa-template 我们基于 vue-cli 脚手架生成项目模板做了一些改造,加入了 vue-ro ...

  6. lua -- table.nums

    table.nums 计算表格包含的字段数量. 格式: count = table.nums(表格对象) Lua 的“#”操作可以取得表格的长度,但仅限从 开始连续数字为索引的表格.table.num ...

  7. angular的uiRouter服务学习(4)

    本篇接着上一篇angular的uiRouter服务学习(3)继续讲解uiRouter的用法 本篇主要讲解uiRouter的url路由 大多数情况下,状态是和url相关联的: 当url改变,激活对应的状 ...

  8. c--日期和时间函数

    C的标准库<time.h>包含了一些处理时间与日期的函数. 1.clock_t clock(void); 函数返回程序自开始执行后的处理器时间,类型是clock_t,单位是tick.如果有 ...

  9. 每日英语:American Cities May Have Hit 'Peak Office'

    Despite some hype and a few regional exceptions, the construction of office towers and suburban offi ...

  10. XCode 7 运行 cocos2dx 2.2.6问题小节

    终于磕磕绊绊的在模拟器上,成功运行了已有项目. 公司提供的Mac系统,版本炒鸡低.向同事拷贝了OS,和XCode. 安装完成后,将已有的可以在Windows上成功运行Android版本的项目,拷贝到了 ...