如何模块化Android的(NotificationManager)库?

时间:2016-08-24 22:00:35

标签: java android design-patterns

我有一个自定义MyNotificationManager我的应用程序(package com.ralfi.myapp.mynotifier;),到目前为止一直有效。我想将这个mynotifier包作为单个* .aar库提取,然后我可以将其导入到我的所有其他应用程序并在那里使用它。

package com.ralfi.mynotifiier;
class MyNotificationManager {
 Context context;
 NotificationManager notificationManager;

 public class MyNotificationManager(Context context) {
     this.context = context;
     mNotificationManager = (NotificationManager) this.context.getSystemService(Context.NOTIFICATION_SERVICE);
 }

 //..
public void sendNotification(NotificationCompat.Builder builder) {
    Intent notificationIntent = new Intent(this.context, MainActivity.class);
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this.context);
    stackBuilder.addParentStack(MainActivity.class);
    stackBuilder.addNextIntent(notificationIntent);
    PendingIntent notificationPendingIntent =
            stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
    mNotificationManager.notify(0, builder.build());
}
}

我会在我的Android应用程序项目中实例化它,并为那里的任何其他类生成ist静态可用。

import com.ralfi.mynotifiier.MyNotificationManager; // e.g.: delivered in a *.aar

class MyRootApplication
  //..
  private static MyNotificationManager myNotificationManager;
  //..
  void onCreate(){
    myNotificationManager = new MyNotificationManager(context);
    //..
  }

  public static AppNotificationManager getAppNotificationManager() {
    return appNotificationManager; 
  }
}

主要问题:正如您在MyNotificationManager.sendNotification()中所看到的,我需要MainActivity.class作为Intent构造函数和X.addParentStack()方法的参数。当我打算将MyNotificationManager作为* .aar库提供时,我当时不知道,在Android App项目中会调用哪个MainActivity?我怎样才能使这个通用?

附带问题:这是通过调用MyRootApplication.getAppNotificationManager().sendNotification(...)在最终项目中使用任何类的正确方法吗?是否有更好的设计模式? (依赖注射?)

1 个答案:

答案 0 :(得分:0)

MainQuestion-你在创建时将它传递给.class变量。 Foo.class实际上是Class类型的变量。虽然你假设一个应用程序有一个“主要活动”,并且它想要所有通知去 - 我发现这种情况很少发生。

附带问题 - 我认为我不认为所有通知都想要进行一项活动。实际上,我甚至不会假设所有通知都没有需要捆绑到intent中的额外参数。我让sendNotification将一个意图作为参数。