调用其它app的activity和让其它app调用你的activity的一些必要设置
来源:互联网 发布:做工瑕疵问题淘宝判罚 编辑:程序博客网 时间:2024/06/15 18:50
早上起来就逛别人博客,还真让我碰到了好东西。博客地址:点击打开链接
本文借助上面的博客连接的代码,并加以改动和总结。
测试一:
有时候我们的app需要调用其它的app的activity,下面就来实现一下:
根据具官方的说明,我们知道,需要在当前的activity中,建立一个模糊的意图,并使用startActivity方法发送出去。
// --------------------------------------打开web页面------------------------------Uri webpage = Uri.parse("http://www.android.com");Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);startActivity(webIntent);
还有一种方式就是,开启别的app中的activity后获取数据并将数据返回:
下面的代码参考官方的例子会更好理解:
// ==================================测试获取Activity返回的数据=========================private void pickContact() {// Create an intent to "pick" a contact, as defined by the content// provider URIIntent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);intent.setType(Phone.CONTENT_TYPE); //这一句很重要啊startActivityForResult(intent, PICK_CONTACT_REQUEST);}private void pickContact(String msg) {Intent intent = new Intent(Intent.ACTION_SEND);intent.setType("text/plain");intent.putExtra(Intent.EXTRA_TEXT,msg);//文本内容startActivity(Intent.createChooser(intent, "nihao"));//弹出的选择程序处理的文字标题}//参考官方代码:http://developer.android.com/guide/components/activities.html@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { //检查响应的请求 if (requestCode == PICK_CONTACT_REQUEST) { //确保请求是成功的 if (resultCode == RESULT_OK) { // 获得指向选定联系人的URI Uri contactUri = data.getData(); //我们只需要号码(NUMBER)列 String[] projection = {Phone.NUMBER}; // 在联系人中执行查询,获得NUMBER column // 我们不需要挑选或排序 // 提示: query()方法应该在单独的线程执行,避免阻塞UI线程 // 考虑使用CursorLoader 执行查询 Cursor cursor = getContentResolver() .query(contactUri, projection, null, null, null); cursor.moveToFirst(); // 从NUMBER column中检索电话号码 int column = cursor.getColumnIndex(Phone.NUMBER); String number = cursor.getString(column); // 使用电话号码做些事情 makeToast(number); } }}// ==================================测试获取Activity返回的数据============结束=========================
不得不承认官方的代码我是没有调通的,根据博文修改了以后测试通过了。上面这个例子可以直接放在activity的代码中使用,调用pickContact()方法,作用是显示选择的联系人电话号码。
目的:开启另外一个app的activity获取数据后返回当前activity
操作:使用startActivityForResult() 代替 startActivity() 发送intent; 使用onActivityResult()方法接收处理返回的数据。
测试二:
将自己的activity开放出去供其它app的activity调用。
在AndroidManifest.xml添加”类似“下面的代码:
第一个intent-filter用于处理文本,第二个intent-filter用于处理图像。这里添加intent-filter就是申明你的activity能够处理什么类型的操作。其它操作的处理与之类似,具体intent_filter标签内的设置,参考官方文档和引用的博文。
<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> <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>拥有以上的过滤器后当一个app的activity发起处理文本或者图像的请求时,你的这个activity就会被直接调用,但是前提是处理文本或图像的activity只有你这一个activity。如果又多个可以处理文本或者图像的activity,这时就会出现一个选择器供用户选择,你自己开放的activity会在这个选择器的列表中显示出来。
下面这段代码用于发送一个处理文本的请求:
Intent intent = new Intent(Intent.ACTION_SEND);intent.setType("text/plain");intent.putExtra(Intent.EXTRA_TEXT,msg);//文本内容startActivity(Intent.createChooser(intent, "nihao"));//弹出的选择程序处理的文字标题以上代码用于测试开放的activity是否能被其它app 的activity调用,只需把上面的代码放在其它app 的activity中就可以了。
要在其它的activity接收传送过来的文本,可以再onCreate() or onStart()方法中添加以下代码(我没有测试成功,一直是空指针异常,先记录下来以后弄明白了再完善):
//获得启动activity的intent Intent intent = getIntent(); Uri data = intent.getData(); // 解决intent类型想做什么 if (intent.getType().indexOf("image/") != -1) { //处理图像数据 } else if (intent.getType().equals("text/plain")) { // 处理文本 }
调用和开放activity基本内容就这些了,值得深究的东西还有很多,本文也遇到不少问题,以后的学习过程中有了更深入的理解再做补充。
- 调用其它app的activity和让其它app调用你的activity的一些必要设置
- 如何调用其它APP的Activity?
- Android中将Activity打入jar包供其它app调用的实现方法
- android 调用其它应用的Activity
- 调用Android其它Context的Activity
- 一个App调用另一个App的Activity
- ios调用其它App
- Android官方开发文档Training系列课程中文版:与其它APP交互之允许其它APP启动你的Activity
- 启动其它APP中的Activity
- 一个App调用另一个App的Activity的方法
- Activity的其它相关知识
- 调用其它app中的Service
- 如何让别的app启动你的activity
- Android Developers:允许其它应用程序启动你的Activity
- android jni方式调用c++代码并在其它app中使用生成的.so文件
- Android四大组件之ContentProvider 全面解析,ContentResolver源码解析如何调用其它APP的ContentProvider
- 提升你的开发水平-解析其它APP
- 关于 App Widget Configuration Activity返回值调用的问题。
- Java中正则Matcher类的matches()、lookAt()和find()的区别
- 经验分享:移动客户端设计开发经验-流程篇
- 关于sudo
- Face++初识
- 奇异值分解在机器视觉中的应用
- 调用其它app的activity和让其它app调用你的activity的一些必要设置
- Linux系统学习笔记:BASH编程
- weblogic---Server subsystem failed. Reason: java.lang.NumberFormatException
- 3D世界空间单位的理解
- Linux下用gSOAP开发Web Service服务端和客户端程序(一)
- HDOJ 1858
- Linux系统学习笔记:日常使用和管理
- 不使用第三方开源包 解析xml(正则解析)
- 内核网络输出帧的处理