最近生接觸了一下android,嘗試導入極光的demo到android study 各種錯誤,然后下載極光生成的項目也是各種錯誤,感覺好像有點脫離時代了,記得以前用eclipse寫android只需要考慮能不能連接上google服務器的問題,從來沒有各種因升級導致的這不行那不么,怎么到android study每升級一次就郁悶一堆人呢...
干脆新建一個項目,手動導入
整個過程分為 1 添加權限 2 添加服務和廣播 3導入libs 4 編碼
1 權限
我是直接復制的demo中的權限設定,里面有一個自定義權限,需要把包名改成當前包名
<permission android:name="包名.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" />
<!-- Required -->
<uses-permission android:name="包名.permission.JPUSH_MESSAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- Required for jmrtc -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<!-- Optional. Required for location feature -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
2 服務,廣播,還有key
<!-- 可配置android:process參數將PushService放在其他進程中 -->
<service
android:name="cn.jpush.android.service.PushService"
android:enabled="true"
android:exported="false" android:process=":pushcore">
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTER" />
<action android:name="cn.jpush.android.intent.REPORT" />
<action android:name="cn.jpush.android.intent.PushService" />
<action android:name="cn.jpush.android.intent.PUSH_TIME" />
</intent-filter>
</service>
<!-- Required SDK核心功能-->
<receiver
android:name="cn.jpush.android.service.PushReceiver"
android:enabled="true" android:exported="false" android:process=":pushcore">
<intent-filter android:priority="1000">
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
<!-- Required 顯示通知欄 -->
<category android:name="您自己的包名" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
<!-- Optional -->
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
<!-- Required SDK核心功能-->
<receiver
android:name="cn.jpush.im.android.helpers.IMReceiver"
android:enabled="true"
android:exported="false"/>
<!-- Required SDK核心功能-->
<receiver
android:name="cn.jpush.android.service.AlarmReceiver"
android:exported="false" />
<!-- Required since JCore 1.1.7. SDK 核心功能-->
<provider
android:name="cn.jpush.android.service.DataProvider"
android:authorities="您自己的包名.DataProvider"
android:exported="false" />
<!-- Required. For publish channel feature -->
<!-- JPUSH_CHANNEL 是為了方便開發者統計APK分發渠道。-->
<!-- 例如: -->
<!-- 發到 Google Play 的APK可以設置為 google-play; -->
<!-- 發到其他市場的 APK 可以設置為 xxx-market。 -->
<!-- 目前這個渠道統計功能的報表還未開放。-->
<meta-data
android:name="JPUSH_CHANNEL"
android:value="developer-default" />
<!-- Required. AppKey copied from Portal -->
<meta-data
android:name="JPUSH_APPKEY"
android:value="您自己的Appkey" />
3 復制libs
將libs中的文件復制到自己項目的app的libs中,並且在jar上單擊右鍵,add as lib
在app 的 build.gradle中的android中增加代碼
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
4 編碼
A 初始化按demo的寫法是寫在自定義的Application中,不過我沒用過,這里只要初始化成功就好了,就放在AppCompatActivity中了
//調試模式會輸出信息,方便找錯 JMessageClient.setDebugMode(true); JMessageClient.init(getApplicationContext(), true);
B 登陸
JMessageClient.login("帳號", "密碼", new BasicCallback() {
@Override
public void gotResult(int i, String s) {
}
});
C 在需要接收消息的地方注冊消息,然后就可以根據自己的需要去查api文檔了
JMessageClient.registerEventReceiver(this);
//在Activity銷毀時最好注銷掉事件
@Override
protected void onDestroy() {
JMessageClient.unRegisterEventReceiver(this);
super.onDestroy();
}
//注意需要this中包含回調事件的處理函數
public void onEventMainThread(ChatRoomMessageEvent event) {
List<Message> msgs = event.getMessages();
for (Message msg : msgs) {
}
}
//也可以用全局消息方式,demo中有
