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

沉默蜂B4A安卓编程

国内资料最全的B4A资料库

 
 
 

日志

 
 

[Intent使用]调用系统打开各种文件  

2014-12-10 14:53:57|  分类: B.基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

不知在B4A中如何调用系统打开各种文件,比如打开图片,TXT文档等等

答:intent传递个mime类型就行了。如果只有一个默认关联 就直接打开 如有多个就弹出选择。





使用意图来打开一个文本日志文件
http://www.b4x.com/android/forum/threads/use-intent-to-open-a-text-log-file.39836/#post-237574

────────────────────── 问

希望一个简单的一个: 

我写日志log . txt(文件中)File.DirDefaultExternal 

我可以使用文件查看器查看文件。 它打开我的平板电脑在北极星的办公室。 

我现在想做一个按钮来打开文件。 理想情况下,这应该不是专门用北极星其他用户将文本文件有不同的观众。 

我一直试图使用意图.Initialize2(文件。 DirDefaultExternal & / log.txt)没有成功。 这是正确的方法吗?


────────────────────── 答

myFile = File.Combine(File.DirDefaultExternal, "Log.txt")

Dim i As Intent

i.Initialize(i.ACTION_VIEW, myFile)
i.SetType("text/plain")

StartActivity(i)







(教程)Inter-app沟通意图
http://www.b4x.com/android/forum/threads/tutorial-inter-app-communication-with-intents.30608/#content


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


一个目的是为不同的应用程序在运行时进行沟通。 它可以用于活动之间传递消息,让他们做动作。 使用它与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。 
如果我有时间,我可以写一个示例不。





txt文件非常简单的推送服务
http://www.b4x.com/android/forum/threads/very-simple-push-service-with-a-txt-file.41794/#post-251801



在后台意图过滤器-拦截短信
http://www.b4x.com/android/forum/threads/intent-filters-intercepting-sms-messages-in-the-background.20103/




http://www.b4x.com/android/forum/threads/instagram-and-twitter-share-image-and-text-with-intent.45399/#post-288106
一点代码共享一个图像instagram使用意图。 希望它是有用的 :)

代码:
Dim u As Uri 'ContentResolver library
u.Parse("file://" & File.Combine(a, "tmpfile.jpg"))
Dim inten As Intent
Dim tmpt As String = "your text"
inten.Initialize(inten.ACTION_SEND,"")
inten.SetType("image/*")
inten.PutExtra("android.intent.extra.STREAM",u)
inten.PutExtra("android.intent.extra.TEXT",tmpt)
inten.SetComponent("com.instagram.android/.activity.MainTabActivity")
StartActivity(inten)
如果你想推特只是改变: 
代码:
inten.SetComponent("com.twitter.android/.composer.ComposerActivity")








http://www.b4x.com/android/forum/threads/getting-data-back-from-camera-app-intent.11378/#post-132918

Sub OpenCam(Directory As String, PictureName As String)

    Dim i As Intent

    i.Initialize("android.media.action.IMAGE_CAPTURE", "")
    i.PutExtra("output", ParseUri("file://" & File.Combine(Directory, PictureName)))
            
    StartActivity(i)
            
End Sub

Sub ParseUri(FileName As String) As Object

    Dim r As Reflector

    Return r.RunStaticMethod("android.net.Uri", "parse", Array As Object(FileName), Array As String("java.lang.String"))

End Sub

使用它,是这样的: 
代码:
OpenCam(File.DirDefaultexternal, "MyPicture.jpg")





  评论这张
 
阅读(669)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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