最近生接觸了一下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中有