`
wdp107
  • 浏览: 141461 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

构造个全透明的Activity

 
阅读更多
最近在玩Nexus S,于是就想搞搞android开发试试,因为有些功能就是找不到满意的实现。

之前用iPhone,一直懒得去研究Object C,现在是java了,这玩意咱熟啊。没想到也是步步惊心,还好多数陷阱狗哥都能解决,直到遇到这个。

先说下需求,我这个小应用的功能是接收其它Activity发送过来的Intent,例如在浏览器里面发送链接与标题(Share Page),这时候会弹出个对话框让你选择你希望用哪个应用来接收数据,我做的这个小玩意就是干这个接收数据的活的。

也就是使用的android.intent.action.SEND,这玩意可是Activity Only啊。

要求是不弹出任何activity,直接在后台处理。

我的思路是创建个隐形的activity,在这里面接收Intent之后做一些处理,然后直接扔到一个新创建service里面处理,然后关闭这个activity,处理完毕该Service自己关闭。

问题就出在这个隐形的activity上面了,无论怎么搞屏幕上都会闪一下,虽然很快也让我不爽,为啥Read It Later就可以呢?

放狗查了半天也没查到解决办法,大家好像都没有这类需求 反正都是回答:为啥不用service。。。

后来没办法,直接上apktool反编译了Read It Later,发现解决办法真tmd简单,就是给activity上个全透明的style,会者不难啊。

styles.xml:
Xml代码 
<style name="Theme.Transparent" parent="@android:style/Theme"> 
       <item name="android:windowBackground">@android:color/transparent</item> 
       <item name="android:windowNoTitle">true</item> 
       <item name="android:windowIsFloating">true</item> 
       <item name="android:windowIsTranslucent">true</item> 
       <item name="android:windowContentOverlay">@null</item> 
       <item name="android:backgroundDimEnabled">false</item> 
   </style> 

AndroidManifest.xml:
Xml代码 
<activity 
            android:name="XXOO" 
            android:theme="@style/Theme.Transparent" 
            android:noHistory="true" 
            android:label="@string/send_activity_name" 
            android:excludeFromRecents="true"> 
            <intent-filter> 
                <action 
                    android:name="android.intent.action.SEND"></action> 
                <data 
                    android:mimeType="text/plain"></data> 
                <category 
                    android:name="android.intent.category.DEFAULT"></category> 
            </intent-filter> 
        </activity> 

O了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics