?
当你在打开一个 txt文档、mp3、网址的时候,一般情况下,会跳出一个选择框,提示你 “使用以下方式发送”,如下图:
这个怎么实现的呢?
尤其当你要去实现?阅读器、播放器、浏览器之类的程序的时候,这个效果肯定是必须的!
?
其实要实现这个并不是很难~
?
假如要弄个 ?XX浏览器,要打开http/https开头的网址~
简略说以下步骤:
在AndroidManifest.xml里面的 XX Activity属性下面 配置个 intent-filter
?
<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>
?
这么一来,在遇到类似这种代码( YY Activity 中 启动一个XX Activity)的时候
?
Uri uri = Uri.parse("http://www.baidu.com");
startActivity(new Intent(Intent.ACTION_VIEW,uri));
?
就会出现上面的那个图了。
这个时候,在XX Activity里面就要接收并处理请求了!
getIntent().getData().toString()
就可以得到?http://www.baidu.com 了!
然后。。。你懂的!没错,webView.loadUrl()就可以了~
?
但是,如果XX浏览器已经打开了,这个时候,就可能会出现下面的情况!
?
你会发现,浏览器还是停留在A页面,并没有跳到baidu去。
?
这提供一个解决方法。
?
1、为XX Activity 设置?android:launchMode="singleTask"这个属性
2、在 XX Activity里面 重写 onNewIntent(Intent i) ? 并得到 网址, i.getData().toString()
?
?
?文中主要涉及的一些知识点 ?intent-filter、launchMode、Activity的SingleTask?等。
?
说到intent-filter 有些GG、MM就会发现一个问题!为什么有时候在luanch(即所有程序)那没图标呢,但是在设置那的程序管理有?
因为修改了AndroidManifest.xml导致的!!!
?
<intent-filter>
? ? ? ?<action android:name="android.intent.action.MAIN" />
? ? ? ?<category android:name="android.intent.category.LAUNCHER" />
?</intent-filter>
看看红色的就知道为什么了!