集成小米推送
入口 小米推送首页 需要一个小米审核通过的开发者帐号,进入下面操作
然后进行 创建应用(首页点击进入后-》立即体验-》左上角可以创建应用)
然后进行一顿的copy,修改类名
//设置manifest文件
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<!-- the following 2 com.xiaomi.mipushdemo should be changed to your package name -->
<permission
android:name="com.caohua.xioamipushdemo.permission.MIPUSH_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="com.caohua.xioamipushdemo.permission.MIPUSH_RECEIVE" />
<uses-permission android:name="android.permission.VIBRATE" />
<application
android:allowBackup="true"
android:name=".MyApp"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name=".MyReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.ERROR" />
</intent-filter>
</receiver>
<service
android:name="com.xiaomi.push.service.XMJobService"
android:enabled="true"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE"
android:process=":pushservice" />
<service
android:name="com.xiaomi.push.service.XMPushService"
android:enabled="true"
android:process=":pushservice" />
<service
android:name="com.xiaomi.mipush.sdk.PushMessageHandler"
android:enabled="true"
android:exported="true" />
<service
android:name="com.xiaomi.mipush.sdk.MessageHandleService"
android:enabled="true" />
<receiver
android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<receiver
android:name="com.xiaomi.push.service.receivers.PingReceiver"
android:exported="false"
android:process=":pushservice">
<intent-filter>
<action android:name="com.xiaomi.push.PING_TIMER" />
</intent-filter>
</receiver>
</application>
//设置application
public class MyApp extends Application {
// user your appid the key.
private static final String APP_ID = "2882303761517719940";
// user your appid the key.
private static final String APP_KEY = "5711771999940";
public static final String TAG = "MyApp";
@Override
public void onCreate() {
super.onCreate();
if (shouldInit()) {
MiPushClient.registerPush(this, APP_ID, APP_KEY);
}
LoggerInterface newLogger = new LoggerInterface() {
@Override
public void setTag(String tag) {
// ignore
}
@Override
public void log(String content, Throwable t) {
Log.d(TAG, content, t);
}
@Override
public void log(String content) {
Log.d(TAG, content);
}
};
Logger.setLogger(this, newLogger);
}
private boolean shouldInit() {
ActivityManager am = ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE));
List<ActivityManager.RunningAppProcessInfo> processInfos = am.getRunningAppProcesses();
String mainProcessName = getPackageName();
int myPid = android.os.Process.myPid();
for (ActivityManager.RunningAppProcessInfo info : processInfos) {
if (info.pid == myPid && mainProcessName.equals(info.processName)) {
return true;
}
}
return false;
}
}
//设置Receiver
public class MyReceiver extends PushMessageReceiver {
/**
* 透传的时候这个方法会被回调
* @param context
* @param miPushMessage
*/
@Override
public void onReceivePassThroughMessage(Context context, MiPushMessage miPushMessage) {
if (miPushMessage != null) {
String alias = miPushMessage.getAlias();
}
}
/**
*自定义的时候,点击时会回调这个方法,其他方法不进行回调
* @param context
* @param miPushMessage
*/
@Override
public void onNotificationMessageClicked(Context context, MiPushMessage miPushMessage) {
if (miPushMessage != null) {
String alias = miPushMessage.getAlias();
}
}
/**
* 消息来的时候回调
*
* @param context
* @param miPushMessage
*/
@Override
public void onNotificationMessageArrived(Context context, MiPushMessage miPushMessage) {
if (miPushMessage != null) {
String alias = miPushMessage.getAlias();
}
}
/**
* 注册成功后,您可以在自定义的onCommandResult和onReceiveRegisterResult中收到注册结果
* @param context
* @param miPushCommandMessage
*/
@Override
public void onCommandResult(Context context, MiPushCommandMessage miPushCommandMessage) {
if (miPushCommandMessage != null) {
String alias = miPushCommandMessage.getCategory();
}
}
/**
* 注册成功后,您可以在自定义的onCommandResult和onReceiveRegisterResult中收到注册结果
* @param context
* @param miPushCommandMessage
*/
@Override
public void onReceiveRegisterResult(Context context, MiPushCommandMessage miPushCommandMessage) {
if (miPushCommandMessage != null) {
String alias = miPushCommandMessage.getCategory();
}
}
}
regid,alias,userAcount,topic 的区分
regid | regid是激活成功后获取到的,避免存储regid。个人认为应该就是设备激活唯一的和服务器对应上的一个标识。 |
alias | 是regid的别名。服务器基本使用这个来进行推送给相应的客户端。个人在应用中就用包名加上rigid一起md5后进行的,然后发送给客户端,一般不进行取消,除非特殊要求调用api进行取消。 |
userAccount | 不同设备设置了同一个userAccount,都会收到这个消息。个人在应用中通过账户的唯一ID进行设置的,如果该帐号退出或者切换帐号的时候,就进行了取消设置userAccount |
topic | 主题 个人在应用中和userAccount的一起使用,相当于该用户订阅了新闻咨询类,当然也和无账号订阅 |
国际化
在作项目时遇到需要翻译成一个台湾的字体的应用,所以弄了一下国际化
弄一个 values-zh-rTW这样的文件夹,然后里面放strings.xml然后就对应的进行翻译,通过google翻译就可以翻译成对应的文字了,需要注意的是 空格"   "用这种方式。基本上没什么难度哈。
如果不知道不同地区对应的怎么写可以同java api查看相应地区的语言就好了
public class Test {
public static void main(String[] args) {
Locale[] locale = Locale.getAvailableLocales();
for (Locale l : locale) {
String displayCountry = l.getDisplayCountry();
if (!"".equals(displayCountry)) {
System.out.println(l.getDisplayCountry() + "--" + l.getLanguage() + "--" + l.getCountry());
}
}
}
}