如何以隐含的意图启动浏览器服务?

时间:2015-03-21 09:39:44

标签: android android-intent android-service

我知道我们可以使用隐含意图打开浏览器活动:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="http" />
        <data android:scheme="https" />
    </intent-filter>
</activity>

但是现在我想点击链接时打开浏览器服务来在后台加载网页,所以我这样做:

<service ...>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="http" />
        <data android:scheme="https" />
    </intent-filter>
</service>

但是无法正常工作,应用选择器没有出现且浏览器服务没有运行。

来自Intent | Android Developers它说&#34; android.intent.action.VIEW&#34;是一个活动,我可以在服务中使用它吗?

或者有任何想法以隐式意图启动浏览器服务吗?

3 个答案:

答案 0 :(得分:1)

经过几天的思考,我发现了一种&#34; hack方式&#34;实施这个解决方案。

只需将活动主题设置为android:theme="@android:style/Theme.NoDisplay",当隐含意图到达活动开始时,我们只会在onCreate() startService()中执行某些操作,例如finish()和然后只是{{1}}这项活动。

整个过程运行速度非常快,经验丰富,看起来很棒:)。

答案 1 :(得分:0)

是的,活动操作必须是活动。此外,您不应将意图过滤器与服务一起使用。它可能但高度,高度气馁。来自文档

  

&#34;注意:为确保您的应用安全,请始终使用明确的意图   启动服务时,不要为您的声明声明意图过滤器   服务。使用隐式意图启动服务是一种安全性   危险,因为你不能确定什么服务会响应   意图,用户无法查看哪些服务启动。以。。。开始   Android 5.0(API级别21),如果您调用,系统会抛出异常   bindService()具有隐式意图。&#34;

答案 2 :(得分:0)

Intent imintent = new Intent(Intent.ACTION_VIEW,Uri.parse(“http:\ www.google.com”));

{

startActivity(imintent);

} catch(ActivityNotFoundException a)

{ }

您可以使用此代码隐式启动浏览器活动。 Androidmanifeast文件中不需要进行任何更改。