【Geek】Android 将代码打包成JAR时Intent跳转的问题
博主即将硕士毕业,最近一直在忙乎毕业设计的开发。
毕业设计要做的是一个移动广告平台。要做成库,方便其他开发者添加到自己开发的应用当中。与其他广告平台不同,这次要开发的平台搭载的是公益广告,没有直接的广告收益。而且针对公益广告,添加了自动管理广告来源和内容推送功能。说白了就是个加强版的AdMob。开发从Android版本开始,所以最近一直就在捣鼓GCM的使用。开发途中发现Google的C2DM改版成GCM以后,在国内找不到太多的资料。不知道是不是在这些领域国人跟进的速度是不是稍微慢了一些。。
言归正传,这次我要说明的是在非Activity的环境中怎么架设Intent,来启动Activity。
我们都知道在Android编程中,Activity和Activity之间的切换是要用到Intent来牵线搭桥的。然而我却遇到了这样的一个问题:我要用Notification来在通知栏里显示推送的消息。点击消息弹出某个搭载了广告的Activity来显示广告。弹出Activity就需要用到Intent,但创建Intent的时候最常用的两个变量,Context和Activity的Class,我们都没有,怎么办?
像这样:
new Intent(Context context, Class<?> cls);
我们一般在Activity中使用的时候:
new Intent(this, XXXActivity.class);
我们收到推送的时候,应用大多是关闭着的,那么这个Intent的出发点,我们就没有。尤其当我们设置Notification的时候,如果只是在一般的类里头,而不是在Activity中的话,我们就需要导入一个任意Activity的Context。
然后在我将做好的代码打包成库的时候,发现一个问题,我要做的是一个广告条,只有一个View,不包含任何Activity,那么在创建Intent的时候,第二个变量也不是固定的。也就是说,在点击Notification的时候跳转到哪个Activity也得由开发者自己定义,所以也需要留出一个接口给开发者。
下面就是我的做法:在一个全局类中生命两个全局变量,Contextcontext,和Class<?>cls.
在主View(因为我的库就是提供给开发者一个广告View)中,写一个方法,接受这两个变量。
public void loadAd(Context context, Class<?> cls){ Util.setContext(context); Uril.setActivity(cls); }
class Util{ private static Context context; private static Class<?> cls; public static void setContext(Context arg0){ context = arg0; } public static Context getContext(){ return context; } public static void setActivity (Class<?> arg0){ cls = arg0; } public static Class<?> getActivity(){ return cls; } }
期中的loadAd()方法是搭载广告View后必须运行的方法。
Util类就是用来保存Context和Activity全局变量的类。
这样一来两个变量都弄到手,以后直接调用就可以了。
在这里再说明一下,以前看过有的帖子里说明说用一下的方法也能运行Intent,但是我试过了,在打包成库的情况下,这个方法不好使~!
//new Intent(context,context.getClass());
好,就这样!