注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

你想快速掌握安卓编程吗

 
 
 

日志

 
 

(教程)Inter-app沟通意图  

2015-08-30 12:48:01|  分类: B.例程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


免责声明 
本教程 没有 测试代码。 可能会有错误,但试图理解这个过程,而不是复制代码。 


一个目的是为不同的应用程序在运行时进行沟通。 它可以用于活动之间传递消息,让他们做动作。 使用它与startActivity目标活动的意图。 广播意图广播给所有活动,任何应用程序与一个意图过滤器可以监听并执行一个动作。 

明确的意图: 目标组件(服务或活动)。 (如一个意图到浏览器) 

隐式意图: 该系统将确定哪些活动推出此意图是最好的。 (例如份额意图) 

更多信息意图: 
目的和意图过滤器| Android开发者 


在这个例子中我们有两个应用程序。 
- - - 提供者 ,包含了我们需要的数据 
- - - 请求者 通过意图,将请求数据 


步骤1:设置提供者能够接收意图 
这可以通过两种方式: 
1。 显式地设置组件,使它可见通过设置出口= true 
2。 定义自己的意图过滤器 

我们将做第二种方法,因为它更结构化的。 

我们建立一个意图过滤器触发活动提供者。 
在manifest编辑器添加以下,你想要触发的活动。 
您还可以使用一个服务(使用AddServiceText代替) 

代码:
AddActivityText(Main, <intent-filter>
   <action android:name=
"com.maximussoft.myprovider.REQUEST" />
   <category android:name=
"android.intent.category.DEFAULT" />
</
intent-filter>)
步骤2:代码返回数据的提供者 
当使用一个活动时, 

代码:
Sub Activity_Resume
 
Dim in as Intent
 
in = Activity.GetStartingIntent
 
If in <> null Then
    
If In.HasExtra("GetSettings"Then
       SendSettings(
in)
       
Activity.Finish
       
Return
    
End If
 
End If
End Sub
… 到目前为止一切顺利…… 
但是你看到这里的问题吗? 
不是吗? 来觉得困难 
Providor如何知道哪个应用程序发送数据回? 目的在默认情况下没有调用包的信息。 

再一次,有两个(简单的)的方式来处理这个问题 
1。 添加信息的请求者意图的所以我们可以叫它回来 
2。 使用StartActivityForResult。 这允许您调用包名,但事实上你甚至不需要它。 你可以返回结果作为一个意图回请求者活动。 

然而,这是你停下来思考你的应用程序需要做什么。 他们是在后台默默地工作吗? 在某种程度上还是显示一个对话框吗? 

现在,我们去第一个选项,假定请求者发送我们额外的意图行动。 
所以在SendSettings我们做什么, 
代码:
Sub SendSettings(in as Intent)
   
Dim returnIntent as Intent
   returnIntent.Initialize(
in.GetExtra("Callback"),"")
   returnIntent.AddCategory(
"android.intent.category.DEFAULT")
   returnIntent.PutExtra(
"Settings",someGlobalSettings)
   returnIntent.PutExtra(
"Successful","True")
   
StartActivity(returnIntent) 'Or StartService(returnIntent)
End Sub
注意如何返回的意图与回调初始化字段从最初收到的意图。 

3。 设置请求者 
正如您可能已经注意到,请求者需要以同样的方式设置除了一些细微的区别。 首先你建立清单,不同的意图过滤器: 
代码:
AddActivityText(Main, <intent-filter>
   <action android:name=
"com.maximussoft.myrequestor.CALLBACK" />
   <category android:name=
"android.intent.category.DEFAULT" />
</
intent-filter>)
4。 代码请求数据的请求者/设置 
这可以在代码的任何地方,但是如果其设置你想请求时,它可能会在活动创建或简历。 这里需要注意的是我们如何initialiaze意图与提供者的作用。 我们发送回调即请求者的意图作为回调,提供者可以寄回数据。 

代码:
Sub RequestSettings
   
Dim in as Intent
   
in.Initialize("com.maximussoft.myprovider.REQUEST","")
   
in.AddCategory("android.intent.category.DEFAULT")
   
in.PutExtra("Callback","com.maximussoft.myrequestor.CALLBACK")
   
in.PutExtra("GetSettings","True")
   
StartActivity(in'Or StartService(returnIntent)
End Sub
5。 代码请求者接受数据 
再这段代码非常类似于供应商,除了获取数据 
代码:
Sub Activity_Resume
 
Dim in as Intent
 
in = Activity.GetStartingIntent
 
If in <> null Then
    
If In.HasExtra("Settings"Then
         AcceptSettings 
'Do something here with your settings
    End If
 
End If
End Sub
点需要注意: 
虽然我不认为意图是非常先进的,它可以完全压倒性的新人,所以做你的研究。 

有许多的做事方法和组合服务/活动可以让事情复杂了。 

可以添加权限意图过滤器,这样插件清单的应用程序需要你的许可。 这有助于在* *访问控制,主要是你可以列出所有应用程序可以访问您的应用程序/设置/数据。 
看到这在操作你可以看看我的应用程序插件相互Cloudpipes PhoneBackup。 
如果我有时间,我可以写一个示例不。
  评论这张
 
阅读(132)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017