在Mono for Android中集成JPush数据推送功能

来源:互联网 发布:手机wifi网络测试软件 编辑:程序博客网 时间:2024/05/21 08:02

【代码下载】

  最近学习使用Mono for Android进行程序开发,为在程序中增加数据推送的功能,选用了JPush(极光推送)来实现,经过上网查找,借助于官方文档,最终实现了JPush的集成。本文以JPush SDK1.6.1Mono for Android 4.10.x为例,说明如何将JPush库集成到Mono for Android程序中(以下简称M4A)

1、创建Java绑定库。

  本人觉得Java绑定库是M4A中一个非常好的功能,可以让C#来方便的使用各种Java库。相比而言,Delphi XE5XE6中缺乏类似的功能,Delphier很是苦恼于如何方便的调用Java的库。如对此不了解,请先参考xamarin文档,学习xamarin工程集成java库的基础原理。

1.1 创建JPushAndroid Java Binding Library项目

启动Visual Studio,新建一个Java Bindings Library工程,如图1所示。


1新建Android Java Binding Library

1.2 JPushJarso文件添加工程中

  将jpush .jar文件复制到工程的将Jars文件中。然后,在工程中创建libs文件夹,然后在libs文件中创建armeabi文件夹和armeabi-v7a文件夹。

然后将JPush .so文件复制到libs中的armeabiarmeabi-v7a文件中。如图2所示。


2 添加jarso文件到项目中

1.3 修改jarso文件的属性

  为了能正确生成Java Bindings Library,需要设制jarso的属性,如图3所示。

 

3设置添加的库文件的生成操作方式

 

1.4 生成DLL

经过上述的设置后,编译后便可生成C#可以调用的DLL库。将该项目添加到M4A项目的引用中,就可以在手机项目的代码中使用C#封装好的原JPushJava库的功能了。

 

2. 创建示例工程,引用Java绑定库并配置JPush参数

2.1 新建一个Mono的项目

  在刚才的解决方案中,新添加一个项目(Android Application),如图4所示。然后添加Java Bindings Library的引用,如图5所示。


4新建Application项目


5添加绑定库的引用

2.2 配置AndroidManifest.xml文件

(1) JPushAndroidApplication的项目属性设置中,按图6所示设置参数,关键是包名的设置。


6设置项目属性

(2) 添加权限、App key等配置信息

打开“AndroidManifest.xml”文件,按官方文档编辑内容,如下所示。

<?xmlversion="1.0"encoding="utf-8"?>

<manifestxmlns:android="http://schemas.android.com/apk/res/android"android:installLocation="auto"package="com.embarcadero.MobileBoss"android:versionCode="1"android:versionName="1.0.0.">

           <uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="8" />

           <permissionandroid:name="com.embarcadero.MobileBoss.permission.JPUSH_MESSAGE"android:protectionLevel="signature" />

           <uses-permissionandroid:name="com.embarcadero.MobileBoss.permission.JPUSH_MESSAGE" />

           <uses-permissionandroid:name="android.permission.RECEIVE_USER_PRESENT" />

           <uses-permissionandroid:name="android.permission.INTERNET" />

           <uses-permissionandroid:name="android.permission.WAKE_LOCK" />

           <uses-permissionandroid:name="android.permission.READ_PHONE_STATE" />

           <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" />

           <uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE" />

           <uses-permissionandroid:name="android.permission.VIBRATE" />

           <uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

           <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE" />

           <uses-permissionandroid:name="android.permission.WRITE_SETTINGS" />

           <!--since 1.6.0-->

           <!-- Optional. Requiredfor location feature-->

           <uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION" />

           <uses-permissionandroid:name="android.permission.ACCESS_COARSE_UPDATES" />

           <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE" />

           <uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE" />

           <uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION" />

           <uses-permissionandroid:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />

           <uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE" />

 

           <applicationandroid:label="JPushDemoApp"android:icon="@drawable/Icon">

                 <!-- Required-->

                 <serviceandroid:name="cn.jpush.android.service.PushService"android:enabled="true"android:exported="false">

                      <intent-filter>

                            <actionandroid:name="cn.jpush.android.intent.REGISTER" />

                            <actionandroid:name="cn.jpush.android.intent.REPORT" />

                            <actionandroid:name="cn.jpush.android.intent.PushService" />

                            <actionandroid:name="cn.jpush.android.intent.PUSH_TIME" />

                      </intent-filter>

                 </service>

                 <!-- Required-->

                 <receiverandroid:name="cn.jpush.android.service.PushReceiver"android:enabled="true">

                      <intent-filterandroid:priority="1000">

                            <!--since 1.3.5-->

                            <actionandroid:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />

                            <!--since 1.3.5-->

                            <categoryandroid:name="com.embarcadero.MobileBoss" />

                            <!--since 1.3.5-->

                      </intent-filter>

                      <!--since 1.3.5-->

                      <intent-filter>

                            <actionandroid:name="android.intent.action.USER_PRESENT" />

                            <actionandroid:name="android.net.conn.CONNECTIVITY_CHANGE" />

                      </intent-filter>

                      <intent-filter>

                            <actionandroid:name="android.intent.action.PACKAGE_ADDED" />

                            <actionandroid:name="android.intent.action.PACKAGE_REMOVED" />

                            <dataandroid:scheme="package" />

                      </intent-filter>

                 </receiver>

                 <!-- Required SDK核心功能-->

                 <activityandroid:name="cn.jpush.android.ui.PushActivity"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:configChanges="orientation|keyboardHidden">

                      <intent-filter>

                            <actionandroid:name="cn.jpush.android.ui.PushActivity" />

                            <categoryandroid:name="android.intent.category.DEFAULT" />

                            <categoryandroid:name="com.embarcadero.MobileBoss" />

                      </intent-filter>

                 </activity>

                 <!-- Required SDK核心功能-->

                 <serviceandroid:name="cn.jpush.android.service.DownloadService"android:enabled="true"android:exported="false"></service>

                 <!-- Required SDK核心功能-->

                 <receiverandroid:name="cn.jpush.android.service.AlarmReceiver" />

                 <meta-dataandroid:name="JPUSH_CHANNEL"android:value="developer-default" />

                 <meta-dataandroid:name="JPUSH_APPKEY"android:value="你的APP_Key"/>

           </application>

      </manifest>

2.3 初始化与JPush平台连接

打开项目的主界面的Acivity1.cs文件,添加初始化代码,如图7所示。


7初始化jpush的代码

2.4 启动调试

一切准备就绪(记得让手机连接网络),开始运行,如能看到如图8所示信息,恭喜你,成功了。在jpush protal中发送条通知试试吧!


8 JPush的输出调试信息


【以下不是必须】

3.  构造自己的Receiver

3.1 在项目中添加一个新类,继承自CN.Jpush.Android.Service.PushReceiver。

 

3.2 修改代码如下

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Android.App;

using Android.Content;

using Android.OS;

using Android.Runtime;

using Android.Views;

using Android.Widget;

using CN.Jpush.Android.Service;

namespace JPushMonoDemo

{

    [BroadcastReceiver]

    [IntentFilter(newstring[] {"cn.jpush.android.intent.REGISTRATION"}, Categories =newstring[]{"com.embarcadero.MobileBoss" })]

    [IntentFilter(newstring[] {"cn.jpush.android.intent.UNREGISTRATION"}, Categories =newstring[]{"com.embarcadero.MobileBoss" })]

    [IntentFilter(newstring[] {"cn.jpush.android.intent.MESSAGE_RECEIVED"}, Categories =newstring[]{"com.embarcadero.MobileBoss" })]

    [IntentFilter(newstring[] {"cn.jpush.android.intent.NOTIFICATION_RECEIVED"}, Categories =newstring[]{"com.embarcadero.MobileBoss" })]

    [IntentFilter(newstring[] {"cn.jpush.android.intent.NOTIFICATION_OPENED"}, Categories =newstring[]{"com.embarcadero.MobileBoss" })]

    [IntentFilter(newstring[] {"cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK"}, Categories =newstring[]{"com.embarcadero.MobileBoss" })]

    public class MyJPushReceiver: PushReceiver

    {

        public override voidOnReceive(Context ctx,Intent ite)

           {

                 //在这里处理各种消息类型

                       Toast.MakeText(ctx,"Received intent!",ToastLength.Short).Show();

                 //base.OnReceive (ctx, ite);

           }

    }

}

因为在类声明前面进行了修饰,可以省去在AndroidManifest.xml中进行配置。

 

参考文献:

[1] http://smilehyh.blog.163.com/blog/static/123343886201362110857402/

[2http://docs.xamarin.com/guides/android/advanced_topics/java_integration_overview/binding_a_java_library_(.jar)/]

0 0
原创粉丝点击