废话不多说,直接上代码:
1、现在配置文件AndroidManifest中的
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>
<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_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<permission
android:name="com.health.huainan.healthhandbook.permission.JPUSH_MESSAGE"
android:protectionLevel="signature"/>
<uses-permission android:name="com.health.huainan.healthhandbook.permission.JPUSH_MESSAGE"/>
<uses-permission android:name="android.permission.VIBRATE"/>
上面这些都是假权限的,,加载哪里小伙伴们应该都知道吧?也给大家截个图:
2、紧接着上面写完后,下面就是<application><application/>这个标签了,下面的要放在application标签中,先看图,需要一个初始化的类,做android的,这个都懂吧?
3、按照上面的在上面标签里面把初始化的类加上,然后集成详细的极光配置文件一定写在application标签里面,(我曾经把极光的这部分最重要的配置放在了标签外面,运行时一直收不到消息,找了好久发现这个问题)
详细配置如下:
<activity
android:name="cn.jpush.android.ui.PushActivity"
android:configChanges="orientation|keyboardHidden"
android:exported="false">
<intent-filter>
<action android:name="cn.jpush.android.ui.PushActivity"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="com.health.huainan.healthhandbook"/>
intent-filter>
activity>
<service
android:name="cn.jpush.android.service.DownloadService"
android:enabled="true"
android:exported="false"/>
<service
android:name="cn.jpush.android.service.PushService"
android:enabled="true"
android:exported="false">
<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>
service>
<provider android:authorities="com.health.gw.healthhandbook.DownloadProvider" android:name="cn.jpush.android.service.DownloadProvider" android:exported="true" /> <provider android:authorities="com.health.gw.healthhandbook.DataProvider" android:name="cn.jpush.android.service.DataProvider" android:exported="false" />
4、上面的位置不要放错了,再给大家接一个图,看一下,上面的复制完,下面就是这样啦!应该是application标签的结束位置了!:
4)注意,复制上面时候,注意配置文件中的这部分有一个value值是自己在极光官网注册的软件app 的APPKEY值,而且是唯一的。
5)注意下面,配置文件有几处这位置是写自己的应用包名的,
应用包名在你的build.gradle(Module:app)中查看applicationId:看图明了:
6)上图中说的为什么那么写呢?在这里,想必你在官网已经下载了相关文件了吧?找到这个文件夹,直接赋值到这里,下面标注的这个文件夹里面
应该有好几个文件夹,文件夹里面还有文件,不要动,直接赋值到这里,注意赋值的位置,和资源文件夹(res)同级,看图说话:
注意拷贝复制不要放错位置,直接在app文件下,这个文件夹下是这两个文件
*注意,有的新版的下载下来可能还有几个文件夹,没关系,一起复制进来,大家看到这两个文件夹的名字是不是想起来什么了啊?前面在build.gradle中ndk中的配置
对,就是这两个名字,有其他的文件名,也一起加上也行!
7)
6)还需要导入极光包,这个你下载的应该有吧?放在哪里一会再说,先把这个加上:
上面我的版本是3.0.8的,你的就根据你的版本对应得加上,还有下面的那个,1.1.6的,我也不清楚,因为有这个包,也需要加上:下面我就把
这两个包的位置截图发出来:
看到了吧?不过需要选择project模式才能看到这个lib包下面的这些东西,那两个包就放这里,
7)下面就开始加极光接收部分的代码了
小伙伴们注意喽:上面弄了半天,没有下面这个也白费,极光广播接收器的代码:需要自己创建一个接受类:一般都这么起名,不用改,
创建一个包名:receiver 新建一个类叫:MyJpushReceiver 下面是类里面的代码:
import android.app.AlertDialog; import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.WindowManager; import com.health.gw.healthhandbook.LoginActivity; import com.health.gw.healthhandbook.WebViewActivity; import com.health.gw.healthhandbook.commui.ActivityCollector; import com.health.gw.healthhandbook.commui.FragmentTabAtivity; import org.json.JSONException; import org.json.JSONObject; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import cn.jpush.android.api.JPushInterface; /** * 自定义接收器 * * 如果不定义这个 Receiver,则: * 1) 默认用户会打开主界面 * 2) 接收不到自定义消息 */ public class MyJpushReceiver extends BroadcastReceiver { private static String TAG = "MyJpushReceiver"; private NotificationManager nm; private DateFormat formatter; private Date dadte; @Override public void onReceive(Context context, Intent intent) { if (null == nm){ nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); } formatter = new SimpleDateFormat("HH:mm:ss"); Bundle bundle = intent.getExtras();//获取intent里携带的数据集合 Log.e("极光推送:", "接收成功"); /** * 一个技巧:把已知的动作写在前面,未知的动作写在后面,这样在用equals时可以避免空指针异常 */ if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())){ String registID = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID); Log.i("ID1",""+registID);// } //当用户点击了通知 if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) { Log.e("用户点击了通知,通知的标题为:", bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE)); ////// Intent intent1 = new Intent(context,FragmentTabAtivity.class); intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent1.putExtra("message",1); context.startActivity(intent1); String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);//获取附加字段,是一个json数组 try { JSONObject json = new JSONObject(extras); Log.i("jsonObject","---->"+json); //进行json.getString("Article")操作时,要保证这里的Article与服务器上的Article一模一样,不然会报空指针异常 String articleUrl = json.getString("MsgURL");//获取附加字段Article,对应的值为articleUrl Log.e("MsgURL:", articleUrl); /** * 点击通知栏通知, 打开网页地址 * 把articleUrl通过startActivity发送给WebViewActivity */ // Intent intent_WebView = new Intent(Util.OPEN_ADD_FRIEND_PAGE); Intent intent_WebView = new Intent(context,WebViewActivity.class); //必须要写,不然出错,因为这是一个从非activity的类跳转到一个activity,需要一个flag来说明,这个flag就是Intent.FLAG_ACTIVITY_NEW_TASK intent_WebView.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent_WebView.putExtra("articleUrl",articleUrl); // Bundle bundle_WebView = new Bundle(); // bundle_WebView.putString("articleUrl", articleUrl);//文章url // intent_WebView.putExtras(bundle_WebView); intent_WebView.setAction("notification_webview"); intent_WebView.addCategory("notification_webview"); context.startActivity(intent_WebView);//打开WebViewActivity // context.sendBroadcast(intent_WebView); } catch (JSONException e) { e.printStackTrace(); } }else if(JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())){ /////// Log.e("用户收到了消息,消息的ID为:", bundle.getString(JPushInterface.EXTRA_MSG_ID)); // Intent intent1 = new Intent(Util.SEND_MESSAGE_BROAD); // intent1.putExtra("bundle",bundle); // context.sendBroadcast(intent1); //自定义消息显示弹出框 alertDialog(context); // LocalBroadcastManager.getInstance(context).sendBroadcast(intent1); } //当用户收到了通知(用户只有先收到通知,才能点击通知) else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) { //////// Log.e("用户收到了通知,通知的标题为:", bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE)); String title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE);//获取通知标题 Log.e("title:", title); String text = bundle.getString(JPushInterface.EXTRA_ALERT);//获取通知内容 Log.e("text:", text); String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);//获取附加字段,是一个json数组 // JSONObject json = null; // try { // json = new JSONObject(extras); //String imageUrl = json.getString("Image");//获取附加字段Image,对应的值为imageUrl // Log.e("imageUrl:", imageUrl); // String articleUrl = json.getString("MsgURL");//获取附加字段Article,对应的值为articleUrl // Log.e("MsgURL:", articleUrl); // Intent intent1 = new Intent(context, WebViewActivity.class); // intent1.putExtra("MsgURL",articleUrl); // } catch (JSONException e) { // e.printStackTrace(); // } //把articleUrl, imageUrl, text, title的数据存到数据库里 // SQLOpenHelper helper = new SQLOpenHelper(context); // helper.add(articleUrl, imageUrl, text, title); Log.e("已经执行到log", "1"); } } private void alertDialog(final Context context) { Log.i("弹出框",":-------》"); AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("下线通知"); builder.setMessage("您的账号于"+formatter.format(new Date())+"在其它手机上登陆,为了您的信息安全,请及时查看"); builder.setCancelable(false); builder.setPositiveButton("重新登陆", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); // builder.setNegativeButton("退出",new DialogInterface.OnClickListener(){ // // @Override // public void onClick(DialogInterface dialog, int which) { // //清楚所有活动界面 // ActivityCollector.finishAll(); // } // }); AlertDialog dialog = builder.create(); dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); dialog.show(); } }
这里面的代码可能并不全是你能需要的,自己看不需要的可以删除
这里面有我自己写的在获取消息时,点击消息跳转的界面,还有自定义消息(我们使用自定义消息来进行一等登录下线功能)获取时,可以在任意界面弹出下面通知,点击确定后可以跳回到登录界面等等!
8)下面就把最开始的那个初始化类Application类加上:看图:
上面这些应该差不多就可以了!
下面就可以在登录你注册的极光账号进行测试吧!如何测试我就不说了,,这么简单,,,哈哈哈哈。。。今天就到这了~~~~~回见。。。。