如何在 Android 中组织代码
How to organising your code in Android
如何组织我的代码?我试图将所有内容都放在不同的包中,但是我的 GCM 通知不再有效。如果我把所有东西都放在同一个根包里没问题。
这是我的两个测试,左边在 gcm 上有问题,右边没有:
有没有什么方法可以像我在正确的方法中那样轻松组织代码?还是所有 classes、活动、服务都需要放在同一个包中?
编辑 1 = 解决方案
您需要创建自己的 class 来扩展 GCMBroadcastReceiver,如下所示:
import android.content.Context;
import com.google.android.gcm.GCMBroadcastReceiver;
public class GCMReceiver extends GCMBroadcastReceiver{
@Override
protected String getGCMIntentServiceClassName(Context context) {
return "yourAppPackage.yourNewAddedPackage.GCMIntentService";
}
}
然后你需要将清单中的默认接收者更改为这个class所在的包。例如:
<receiver android:name="yourPackage.PackageOfTheGCMReceiver.GCMReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="be.vanlooverenkoen.piautomation" />
</intent-filter>
</receiver>
如果您想组织代码,可以选择以下模式:MVC,关于是否 Android 使用默认 MVC 存在很大争议。
但是我在你的结构中看到了你的图片,你想要一个关于 .java 文件的推荐。
我给出了以下我在不同文件、书籍和 github 存储库中看到的建议(包按字母顺序排列):
活动
适配器
验证者
数据
data.migrations
碎片
帮手
接口
型号
首选项
同步
您需要创建自己的 class 来扩展 GCMBroadcastReceiver,如下所示:
import android.content.Context;
import com.google.android.gcm.GCMBroadcastReceiver;
public class GCMReceiver extends GCMBroadcastReceiver{
@Override
protected String getGCMIntentServiceClassName(Context context) {
return "yourAppPackage.yourNewAddedPackage.GCMIntentService";
}
}
然后你需要将清单中的默认接收者更改为这个class所在的包。例如:
<receiver android:name="yourPackage.PackageOfTheGCMReceiver.GCMReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="be.vanlooverenkoen.piautomation" />
</intent-filter>
</receiver>
如何组织我的代码?我试图将所有内容都放在不同的包中,但是我的 GCM 通知不再有效。如果我把所有东西都放在同一个根包里没问题。
这是我的两个测试,左边在 gcm 上有问题,右边没有:
有没有什么方法可以像我在正确的方法中那样轻松组织代码?还是所有 classes、活动、服务都需要放在同一个包中?
编辑 1 = 解决方案
您需要创建自己的 class 来扩展 GCMBroadcastReceiver,如下所示:
import android.content.Context;
import com.google.android.gcm.GCMBroadcastReceiver;
public class GCMReceiver extends GCMBroadcastReceiver{
@Override
protected String getGCMIntentServiceClassName(Context context) {
return "yourAppPackage.yourNewAddedPackage.GCMIntentService";
}
}
然后你需要将清单中的默认接收者更改为这个class所在的包。例如:
<receiver android:name="yourPackage.PackageOfTheGCMReceiver.GCMReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="be.vanlooverenkoen.piautomation" />
</intent-filter>
</receiver>
如果您想组织代码,可以选择以下模式:MVC,关于是否 Android 使用默认 MVC 存在很大争议。
但是我在你的结构中看到了你的图片,你想要一个关于 .java 文件的推荐。 我给出了以下我在不同文件、书籍和 github 存储库中看到的建议(包按字母顺序排列):
活动
适配器
验证者
数据
data.migrations
碎片
帮手
接口
型号
首选项
同步
您需要创建自己的 class 来扩展 GCMBroadcastReceiver,如下所示:
import android.content.Context;
import com.google.android.gcm.GCMBroadcastReceiver;
public class GCMReceiver extends GCMBroadcastReceiver{
@Override
protected String getGCMIntentServiceClassName(Context context) {
return "yourAppPackage.yourNewAddedPackage.GCMIntentService";
}
}
然后你需要将清单中的默认接收者更改为这个class所在的包。例如:
<receiver android:name="yourPackage.PackageOfTheGCMReceiver.GCMReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="be.vanlooverenkoen.piautomation" />
</intent-filter>
</receiver>