实例详解android studio如何导入.so文件的方法

下面是通过自己写的一个demo,绝对不是官方demo,来给大家讲述了如何在android studio如何导入.so文件的流程和方法,欢迎大家在下方留言讨论指正。

1,android studio如何加载极光推送的jar包和.so库文件.

2,如何获取附加字段里的键对应的值.

3,如何点击通知栏通知进入webView加载页面.

4,如何把推送过来的消息进行存储,并以listView显示,便于查看推送历史.

5,如何点击listView的item,进行网页跳转,再次进入webView加载页面.

6,如何为推送设置免打扰时段.(copy官方demo).

7,属性动画效果.

我能写出这篇文章,也是被极光推送虐了很多遍,就在我要放弃的时候,终于发现了问题所在,这个问题说白了还是我是粗心导致的.至于什么问题,一会再说.

这篇文章结尾有我自己写的一个demo,大家可以去下载看看,就是下载积分有点多,绝对不是官方自动生成的demo,要说唯一的相同点,就是设置免打扰时段是直接复制过来的,之前被极光折磨时,也找了很多demo子看看,但是那些demo要么是官方原版,要么是稍微改动一下,依然换汤不换药.还花了我很多积分,并且标题还说是自己写的demo,我就呵呵了,真的很没有良心,我的这个demo不能说多好,但至少不是官方demo并且界面做的还算可以,至少我自己这样认为.再说一点,我的demo或者这篇文章,差不多适合想用极光推送但不知从何下手的新手,或者像我这样被虐了很多遍的人,如果你想问服务器端怎么写,那这篇文章和demo不适合你,估计你的水平已超过了我,这篇文章主要说利用普通推送,废话说完,进入正题.

首先明确一下,想要接收到极光的推送,至少做到什么程度才能接收到或者不报错.有人说官方给的demo里的类我需要完全拷贝吗,或者说我需要拷贝几个才行?那现在我告诉你,官方demo里的类其实1个都不拷贝也能接收到,但前提在于把manifest.xml清单文件配置好才行.下面进入第一点:

1,android studio如何加载极光推送的jar包和.so库文件.

到极光推送的官网上把关于android版本的推送sdk下载并解压,如下图:

liibs目录里存放的是推送的jar包和支持手机架构的后缀为.so的库文件,res目录里存放的是一些xml文件,和一些图片,这些文件时为了接收富媒体消息用的,res目录里的文件直接拷贝到相应目录即可,libs目录里的文件就是要主要讲的.

这里面默认的包含了arm架构的各种版本,如果你的手机或者模拟器的系统架构是x86或者mip的,可以去极光官网下载对应版本,还有一个极光推送sdk 的jar包,android studio如何集成jar文件我之前有篇博客已经说了,可以翻翻我之前的博客,现在只剩下.so库文件怎么加载了,我之前也找了好多种方法,但是最后还是只有1种有用,那就是极光官网提供的那个方法,:如下图:

完成以上两步就配置好了jar包和.so库文件,本人亲测可用.

2,如何获取附加字段里的键对应的值.打开极光推送官方文档.如下图:

以上2个action和3个常量就能完成客户端接收推送部分百分之80的部分,而我的demo就是根据这2个action和3个常量做出来的,下面是具体怎么使用这些action和常量的截图:

3,3,如何点击通知栏通知进入webView加载页面.

实现点击通知栏通知进入webView加载页面,首先得监听点击了通知这个action,并且你得有一个webView界面,如下图.

4,如何把推送过来的消息进行存储,并以listView显示,便于查看推送历史.

最终listView显示的item是这种样式:

5,如何点击listView的item,进行网页跳转,再次进入webView加载页面.

这个就简单了,直接监听onItemClick事件即可:如下图:

6,如何为推送设置免打扰时段.

直接copy官方demo,没啥可说的,参见官方demo

7,属性动画效果.

这个也是我上篇博客说过的,可以翻翻看,我直接把上篇博文的例子当做我这次demo的主界面,看起来还是不错的.

之前说到我被虐,其实都是粗心大意引起的,我在配置manifest.xml文件时,少配置一个包名,一直给我报空指针错误,后来发现之后,改了,就一切ok了,关键还是得细心.,这里展示一下自己已修复好的完整清单文件.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.example.administrator.jiguangpush"
     android:versionCode="181"
     android:versionName="1.8.1">
  <!--总共有7个地方需要配置包名,一定不要配置少了!!!!!!!!!!!!!!!!!!!!!-->
  <!-- Required 自定义用来收发消息的相关权限 -->
  <permission
    android:name="com.example.administrator.jiguangpush.permission.JPUSH_MESSAGE"
    android:protectionLevel="signature"/>
  <!-- Required 一些系统要求的权限,如访问网络等 -->
  <uses-permission android:name="com.example.administrator.jiguangpush.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.WRITE_SETTINGS"/>
  <uses-permission android:name="android.permission.VIBRATE"/>
  <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
  <!-- Optional for location -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
  <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_NETWORK_STATE"/>
  <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">
    <activity
      android:name=".MainActivity"
      android:label="@string/app_name">
      <intent-filter>
        <action android:name="android.intent.action.MAIN"/>

        <category android:name="android.intent.category.LAUNCHER"/>
      </intent-filter>
    </activity>

    <!-- Required SDK核心功能 直接拷贝 -->
    <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.example.administrator.jiguangpush"/>
      </intent-filter>
    </activity>
    <!-- Required SDK核心功能  直接拷贝 -->
    <service
      android:name="cn.jpush.android.service.DownloadService"
      android:enabled="true"
      android:exported="false">
    </service>
    <!-- Required SDK 核心功能 直接拷贝 -->
    <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>
    <!-- 可不拷贝 since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->
    <!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
    <service
      android:name="cn.jpush.android.service.DaemonService"
      android:enabled="true"
      android:exported="true">
      <intent-filter>
        <action android:name="cn.jpush.android.intent.DaemonService"/>
        <category android:name="com.example.administrator.jiguangpush"/>
      </intent-filter>
    </service>
    <!-- Required SDK核心功能  直接拷贝 -->
    <receiver
      android:name="cn.jpush.android.service.PushReceiver"
      android:enabled="true"
      android:exported="false">
      <intent-filter android:priority="1000">
        <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY"/>
        <!-- Required 显示通知栏 -->
        <category android:name="com.example.administrator.jiguangpush"/>
      </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.android.service.AlarmReceiver"/>
    <receiver
      android:name=".MyReceiver"
      android:enabled="true"
      android:exported="false">
      <intent-filter>
        <action android:name="cn.jpush.android.intent.REGISTRATION"/>
        <!-- Required 用户注册SDK的intent -->
        <action android:name="cn.jpush.android.intent.UNREGISTRATION"/>
        <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED"/>
        <!-- Required 用户接收SDK消息的intent -->
        <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED"/>
        <!-- Required 用户接收SDK通知栏信息的intent -->
        <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED"/>
        <!-- Required 用户打开自定义通知栏的intent -->
        <action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK"/>
        <!-- Optional 用户接受Rich Push Javascript 回调函数的intent -->
        <action android:name="cn.jpush.android.intent.CONNECTION"/>
        <!-- 接收网络变化 连接/断开 since 1.6.3 -->
        <category android:name="com.example.administrator.jiguangpush"/>
      </intent-filter>
    </receiver>
    <!-- Required . Enable it you can get statistics data with channel 要求填写appKey再拷贝 -->
    <meta-data
      android:name="JPUSH_CHANNEL"
      android:value="developer-default"/>
    <meta-data
      android:name="JPUSH_APPKEY"
      android:value="649d75504a154477a4aaeb32"/>
    <!-- </>值来自开发者平台取得的AppKey -->
    <activity
      android:name=".NotificationListActivity"
      android:label="@string/title_activity_second">
    </activity>
    <activity
      android:name=".PushTextActivity"
      android:label="@string/title_activity_push_text">
    </activity>
    <activity
      android:name=".SetFreeTimeActivity"
      android:label="@string/title_activity_set_free_time">
    </activity>
    <activity
      android:name=".WebViewActivity"
      android:label="@string/title_activity_web_view">
    </activity>
  </application>
</manifest>

再说一下,服务器界面我只用到普通消息进行发送,自定义消息和富媒体消息都没用,最后在上一张服务器发送普通消息的图:

以上就是本次教程的全部内容,需要的朋友跟着测试一下吧,可以把结果反馈给我们我们,也欢迎大家踊跃投稿。

(0)

相关推荐

  • 实例详解android studio如何导入.so文件的方法

    下面是通过自己写的一个demo,绝对不是官方demo,来给大家讲述了如何在android studio如何导入.so文件的流程和方法,欢迎大家在下方留言讨论指正. 1,android studio如何加载极光推送的jar包和.so库文件. 2,如何获取附加字段里的键对应的值. 3,如何点击通知栏通知进入webView加载页面. 4,如何把推送过来的消息进行存储,并以listView显示,便于查看推送历史. 5,如何点击listView的item,进行网页跳转,再次进入webView加载页面. 6

  • 详解Android studio如何导入jar包方法

    下面我就总结一下Android studio大家在导入jar包时遇到的一些问题和解决方法: 1,首先先说一下怎么在AS 中找到sdk,jdk,ndk的安装路径,可能一部分人一开始找不到,下面贴出方法: Android studio 中更改sdk的路径,如下图,在右边红色方框中更改sdk的路径 还有一种更好的方式可以把sdk,jdk,ndk的路径全部找到,首先File---Other Settings---Default Project Structure...,打开如下图界面,从红方框处即可直接

  • 详解Android Studio如何导入第三方类库、jar包和so库

    第三方类库源码 将一网友的XMPP代码从ADT转到AS时,发现其使用了第三方类库,源码放在了lib下,直接在AS中Import project,第三方类库并没有自动导入进来,看来需要自己动手了. 项目的目录结构如下: XMPP$ ls app build.gradle gradlew import-summary.txt XMPP.iml build gradle gradlew.bat local.properties settings.gradle 将第三方源码qqEmoji-lib拷到此目

  • 详解Android Studio中Git的配置及协同开发

    一. Android Stutio配置git setting–>Version Control–>Git–>Path to Git executable中选择git.exe的位置,这个Stutio一般会默认配置好: 配置完路径后点击后面的Test按钮,出现下面提示框则表示配置成功: 二. 将项目分享到github 1. 设置github账号密码 打开Setting–>Version Control–>GitHub,填写完账号密码后,点击Test测试,如果连接成功会弹出如下提示

  • Android+OpenCV4.2.0环境配置详解(Android studio)

    仅是个人记录,希望能对有需要的给予一些小小的帮助 首先我们肯定是要去到OpenCV的官网下载对应的SDK,并解压得到文件夹(opencv-4.2.0-android-sdk) 其次是NDK环境搭建(双击shift,输入sdk,找到sdk manager,将下面红色框框勾选安装) 创建项目,我选用的是(并不是只有这一选择) 导入Module File->New->Import Module 路径选择**\opencv-4.2.0-android-sdk\OpenCV-android-sdk\sd

  • 实例详解Android Selector和Shape的用法

    shape和selector是Android UI设计中经常用到的,比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到shape和selector.可以这样说,shape和selector在美化控件中的作用是至关重要的. 1:Selector drawable的item中可以有以下属性: android:drawable="@[package:]drawable/drawable_resource" android:state_pressed=["

  • 实例详解Android文件存储数据方式

    总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.下面通过本文给大家介绍Android文件存储数据方式. 1.文件存储数据使用了Java中的IO操作来进行文件的保存和读取,只不过Android在Context类中封装好了输入流和输出流的获取方法. 创建的存储文件保存在/data/data/<package name>/files文件夹下. 2.操作. 保存文件内容:通过Context.openFileOutput获取输出流,参数分别为文件名和存储模式. 读取文件内容:通

  • 详解Android Studio正式签名进行调试的实现步骤

    详解Android Studio正式签名进行调试的实现步骤 在Android Studio中,可以使用Gradle进行打包时自动签名.其实Android Studio默认会给调试应用加上Debug签名,但有时候调一些第三方SDK时,需要正式签名才能调起来,所以接下来分享一下使用Gradle自动签名的方法. 一.创建签名文件 打开AS,选择Build->Generate Signed APK,选择要打包的项目,点击Next,再点击Create new...创建签名文件 填写签名文件响应信息,如下所

  • 详解Android studio 3+版本apk安装失败问题

    studio2.3升级到3.1之后将apk发给别人下载到手机上安装,华为提示安装包无效或与操作系统不兼容,魅族提示apk仅为测试版,要求下载正式版安装. 在网上找了一下,发现是studio3.0之后的instant run功能引起的,直接点击绿色箭头按钮烧出来的apk都是不完整的,也就是魅族指的测试版,并且这个apk的路径在app\build\intermediates\instant-run-apk\debug下,而原来的app\build\outputs\apk\debug路径下已经没有ap

  • 详解Android Studio实现用户登陆界面demo(xml实现)

    使用Android Studio 编写的第一个demo,使用布局文件-xml实现用户登录界面 注:所建工程均为Android 6.0 所以只要是Android 6.0(包括6.0)以上的真机,模拟机都可以使用 Step1:Android Studio 开发环境的搭建: 1.安装JDK (1.8): 2.安装Android studio (3.3.1) 包含 gradle.sdk manage .avd manage : 3.使用sdk manage 下载安装 sdk: 4.使用avd manag

随机推荐