【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());

好,就这样!

相关推荐