SecurityException: Unable to start service Intent
如果遇到报下面这个错误:
java.lang.SecurityException: Unable to start service Intent { flg=0x20 cmp=com.ucar.app/cn.jpush.android.service.DaemonService }: Unable to launch app com.ucar.app/10101 for service Intent { cmp=com.ucar.app/cn.jpush.android.service.DaemonService }: user 0 is restricted
at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1769)
at android.app.ContextImpl.startService(ContextImpl.java:1742)
at android.content.ContextWrapper.startService(ContextWrapper.java:527)
at cn.jpush.android.service.l.run(Unknown Source)
at java.lang.Thread.run(Thread.java:818)
则是当前版本的极光推送sdk在当前手机系统里不能支持启动服务,这个是旧极光推送SDK存在对安卓8.0以上手机不适配的问题,目前极光新版本SDK已经没那问题了,所以 解决办法就是替换成最新的极光SDK去官网下载下载最新版本的极光推送SDK,下载地址:https://docs.jiguang.cn/jpush/resources/把下载下来的lib里面所有东西都拷贝到自己项目对应的lib文件里并进行依赖,
把res 里文件拷贝到对应项目res文件里(注意检查自己项目res里面文件跟它不要同名,否则会被替换掉,造成自己项目资源文件丢失错误)
然后在AndroidManifest里配置如下代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="您应用的包名"
android:versionCode="316"
android:versionName="3.1.6"
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="23" />
<!-- Required --><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.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.MOUNT_UNMOUNT_FILESYSTEMS" /><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" /><!-- Optional. Required for location feature --><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 用于开启 debug 版本的应用在 6.0 系统上的层叠窗口权限 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><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" /><uses-permission android:name="android.permission.GET_TASKS" /><uses-permission android:name="android.permission.VIBRATE" /><application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:name="Your Application Name"> <!-- Required SDK 核心功能--> <!-- 可配置 android:process 参数将 PushService 放在其他进程中 --> <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 3.0.9 Required SDK 核心功能--> <provider android:authorities="您应用的包名.DataProvider" android:name="cn.jpush.android.service.DataProvider" android:exported="true" /> <!-- since 1.8.0 option 可选项。用于同一设备中不同应用的 JPush 服务相互拉起的功能。 --> <!-- 若不启用该功能可删除该组件,或把 enabled 设置成 false ;App 不会被其他 App 拉起,但会拉起其他的 App。 --> <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="您应用的包名"/> </intent-filter> </service> <!-- since 3.1.0 Required SDK 核心功能--> <provider android:authorities="您应用的包名.DownloadProvider" android:name="cn.jpush.android.service.DownloadProvider" android:exported="true" /> <!-- Required SDK 核心功能--> <receiver android:name="cn.jpush.android.service.PushReceiver" android:enabled="true" > <intent-filter android:priority="1000"> <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" /> <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 核心功能--> <activity android:name="cn.jpush.android.ui.PushActivity" android:configChanges="orientation|keyboardHidden" android:theme="@android:style/Theme.NoTitleBar" android:exported="false" > <intent-filter> <action android:name="cn.jpush.android.ui.PushActivity" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="您应用的包名" /> </intent-filter> </activity> <!-- SDK 核心功能--> <activity android:name="cn.jpush.android.ui.PopWinActivity" android:configChanges="orientation|keyboardHidden" android:exported="false" android:theme="@style/MyDialogStyle"> <intent-filter> <category android:name="android.intent.category.DEFAULT" /> <category android:name="您应用的包名" /> </intent-filter> </activity> <!-- Required SDK 核心功能--> <service android:name="cn.jpush.android.service.DownloadService" android:enabled="true" android:exported="false" > </service> <!-- Required SDK 核心功能--> <receiver android:name="cn.jpush.android.service.AlarmReceiver" /> <!-- Required since 3.0.7 --> <!-- 新的 tag/alias 接口结果返回需要开发者配置一个自定的广播 --> <!-- 该广播需要继承 JPush 提供的 JPushMessageReceiver 类, 并如下新增一个 Intent-Filter --> <receiver android:name="自定义 Receiver" android:enabled="true" android:exported="false" > <intent-filter> <action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" /> <category android:name="您应用的包名" /> </intent-filter> </receiver> <!-- User defined. 用户自定义的广播接收器--> <receiver android:name="您自己定义的 Receiver" android:enabled="true" android:exported="false"> <intent-filter> <!--Required 用户注册 SDK 的 intent--> <action android:name="cn.jpush.android.intent.REGISTRATION" /> <!--Required 用户接收 SDK 消息的 intent--> <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" /> <!--Required 用户接收 SDK 通知栏信息的 intent--> <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" /> <!--Required 用户打开自定义通知栏的 intent--> <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <!-- 接收网络变化 连接/断开 since 1.6.3 --> <action android:name="cn.jpush.android.intent.CONNECTION" /> <category android:name="您应用的包名" /> </intent-filter> </receiver> <!-- User defined. 用户自定义 Receiver 接收被拉起回调--> <!-- 自定义 Receiver 组件,继承cn.jpush.android.service.WakedResultReceiver类,复写onWake(int wakeType)或 onWake(Context context, int wakeType)方法以监听被拉起 --> <receiver android:name="xx.xx.xx.MyWakedResultReceiver"> <intent-filter> <action android:name="cn.jpush.android.intent.WakedReceiver" /> <category android:name="${applicationId}" /> </intent-filter> </receiver> <!-- 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"/></application>
</manifest>
最后在你自己项目的Application里配置初始化极光推送JPushInterface.init(this);
如
public class ExampleApplication extends Application {@Override
br/>@Override
super.onCreate();
JPushInterface.setDebugMode(true);
JPushInterface.init(this);
}
}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。