Android 中出现这样的警告 Exported service does not require permission

时间:2021-07-18 11:35:22
这个警告出现在android工程中的AndroidManifest.xml中,那位谁能说说这是什么原因啊?!

23 个解决方案

#1


需要权限啊,你要看详细提示,里面会提示具体缺少了哪个权限,然后在AndroidManifest.xml里面加入对应的权限就可以了。

#2


引用 1 楼  的回复:
需要权限啊,你要看详细提示,里面会提示具体缺少了哪个权限,然后在AndroidManifest.xml里面加入对应的权限就可以了。

就提示了这一句话!

#3


AndroidManifest.xml代码发上来看看

#4


意思是你的service不需要权限设置,内部就可以调用,你把加的限制或者intent-filter去掉试试,不行就把
注册的service配置文件贴出来看看

#5


引用 3 楼  的回复:
AndroidManifest.xml代码发上来看看

下面是代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wind.musicplayer"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="15" />

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name" >
        <activity
            android:name=".activity.MyMusicPlayerActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />                

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            
        </activity>
        
        <service android:name=".serviec.MusicPlayerService">
            <intent-filter>
                <action android:name="com.wind.MusicService"/>
                <action android:name="com.wind.serviceaction"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </service>
        
    </application>

</manifest>

#6


引用 4 楼  的回复:
意思是你的service不需要权限设置,内部就可以调用,你把加的限制或者intent-filter去掉试试,不行就把
注册的service配置文件贴出来看看

这是在Java类里面的代码:
public static String PLAY_SERVICE = "com.wind.MusicService";
startService(new Intent(MusicPlayerService.PLAY_SERVICE));
下面是AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.wind.musicplayer"
  android:versionCode="1"
  android:versionName="1.0" >

  <uses-sdk android:minSdkVersion="15" />

  <application
  android:icon="@drawable/icon"
  android:label="@string/app_name" >
  <activity
  android:name=".activity.MyMusicPlayerActivity"
  android:label="@string/app_name" >
  <intent-filter>
  <action android:name="android.intent.action.MAIN" />   

  <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
    
  </activity>
    
  <service android:name=".serviec.MusicPlayerService">
  <intent-filter>
  <action android:name="com.wind.MusicService"/>
  <action android:name="com.wind.serviceaction"/>
  <category android:name="android.intent.category.LAUNCHER"/>
  </intent-filter>
  </service>
    
  </application>

</manifest>

#7


加上这个就可以了
  android:exported="false"
比如: <service android:name="MusicService"  android:exported="false">

#8


引用 7 楼  的回复:
加上这个就可以了
  android:exported="false"
比如: <service android:name="MusicService" android:exported="false">


没用呀。。。。

我以前不会报这样的错
后面升级了SDK 到19版就会这样子的现象

#9


引用楼主  的回复:
这个警告出现在android工程中的AndroidManifest.xml中,那位谁能说说这是什么原因啊?!


我也有这样的问题,,,不知道怎么解决,,但是只是个警告,对程序没啥影响

#10


引用 9 楼  的回复:
引用楼主 的回复:
这个警告出现在android工程中的AndroidManifest.xml中,那位谁能说说这是什么原因啊?!


我也有这样的问题,,,不知道怎么解决,,但是只是个警告,对程序没啥影响

只是想弄明白为什么会有这个警告,出现了这个警告总是想弄明白原因

#11


缺少权限限制
这是一个可以被其他程序访问的Service,需要声明一个权限保护你的service

#12


引用 11 楼  的回复:
缺少权限限制
这是一个可以被其他程序访问的Service,需要声明一个权限保护你的service

要声明个什么权限?

#13


结过贴了也给你答案!
就是同时在<service>和 <action>中加入android:exported="false",就可以了!如下:
<service android:name=".serviec.MusicPlayerService" android:exported="false">
  <intent-filter>
  <action android:name="com.wind.MusicService"android:exported="false"/>
  <action android:name="com.wind.serviceaction"/>
  <category android:name="android.intent.category.LAUNCHER"/>
  </intent-filter>
  </service>

#14


引用 13 楼  的回复:
结过贴了也给你答案!
就是同时在<service>和 <action>中加入android:exported="false",就可以了!如下:
<service android:name=".serviec.MusicPlayerService" android:exported="false">
  <intent-filter>
  <action android:name="com……

谢谢你啊!

#15


引用 13 楼  的回复:
结过贴了也给你答案!
就是同时在<service>和 <action>中加入android:exported="false",就可以了!如下:
<service android:name=".serviec.MusicPlayerService" android:exported="false">
  <intent-filter>
  <action android:name="com……

谢谢你啊!

#16


我的也出现这个问题了 同时还有 can not dispatch DDM chunk ,Application is not installed on your phone 。
最后把别的manifest文件拷过来才可以,但是我的activity 是最简单的,文件内容也都一样啊

#17


引用 13 楼  的回复:
结过贴了也给你答案!
就是同时在<service>和 <action>中加入android:exported="false",就可以了!如下:
<service android:name=".serviec.MusicPlayerService" android:exported="false">
  <intent-filter>
  <action android:name="com……


在网上查到的:android:exported 这个属性用于指示该服务是否能够被其他应用程序组件调用或跟它交互。如果设置为true,则能够被调用或交互,否则不能。设置为false时,只有同一个应用程序的组件或带有相同用户ID的应用程序才能启动或绑定该服务。

我想问在设置为true的情况下,如何使该服务被其他应用程序组件调用或交互呢,用AIDL吗?我写过AIDL的demo小程序也没有设置过这个属性啊。。

#18


先在<manifest>标签下加入

<permission android:protectionLevel="normal" android:name="oem.permission.SENDMAIL"></permission>

然后在<service>标签下

android:permission="oem.permission.SENDMAIL"

  不解释~  你明白的~

#19


<service />中定义了intent-filter的话,android:exported属性值默认为true,而你的<service />定义中没有指定访问权限,其他程序不需要申请权限便可以启动这个service,因而有这个安全警告。

#20


只需要在用到service的地方换句代码
startService(new  Intent(MainActivity.this,Service_Player.class));

#21


引用 20 楼 u014311531 的回复:
只需要在用到service的地方换句代码
startService(new  Intent(MainActivity.this,Service_Player.class));

然后把androidmanifest里面的<intent-filter>删掉就行

#22


把 android:exported该改为 false 也不会有提示的,这种方法是限制外部访问,自然不需要权限了

#23


感觉19楼是正解……

#1


需要权限啊,你要看详细提示,里面会提示具体缺少了哪个权限,然后在AndroidManifest.xml里面加入对应的权限就可以了。

#2


引用 1 楼  的回复:
需要权限啊,你要看详细提示,里面会提示具体缺少了哪个权限,然后在AndroidManifest.xml里面加入对应的权限就可以了。

就提示了这一句话!

#3


AndroidManifest.xml代码发上来看看

#4


意思是你的service不需要权限设置,内部就可以调用,你把加的限制或者intent-filter去掉试试,不行就把
注册的service配置文件贴出来看看

#5


引用 3 楼  的回复:
AndroidManifest.xml代码发上来看看

下面是代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wind.musicplayer"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="15" />

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name" >
        <activity
            android:name=".activity.MyMusicPlayerActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />                

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            
        </activity>
        
        <service android:name=".serviec.MusicPlayerService">
            <intent-filter>
                <action android:name="com.wind.MusicService"/>
                <action android:name="com.wind.serviceaction"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </service>
        
    </application>

</manifest>

#6


引用 4 楼  的回复:
意思是你的service不需要权限设置,内部就可以调用,你把加的限制或者intent-filter去掉试试,不行就把
注册的service配置文件贴出来看看

这是在Java类里面的代码:
public static String PLAY_SERVICE = "com.wind.MusicService";
startService(new Intent(MusicPlayerService.PLAY_SERVICE));
下面是AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.wind.musicplayer"
  android:versionCode="1"
  android:versionName="1.0" >

  <uses-sdk android:minSdkVersion="15" />

  <application
  android:icon="@drawable/icon"
  android:label="@string/app_name" >
  <activity
  android:name=".activity.MyMusicPlayerActivity"
  android:label="@string/app_name" >
  <intent-filter>
  <action android:name="android.intent.action.MAIN" />   

  <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
    
  </activity>
    
  <service android:name=".serviec.MusicPlayerService">
  <intent-filter>
  <action android:name="com.wind.MusicService"/>
  <action android:name="com.wind.serviceaction"/>
  <category android:name="android.intent.category.LAUNCHER"/>
  </intent-filter>
  </service>
    
  </application>

</manifest>

#7


加上这个就可以了
  android:exported="false"
比如: <service android:name="MusicService"  android:exported="false">

#8


引用 7 楼  的回复:
加上这个就可以了
  android:exported="false"
比如: <service android:name="MusicService" android:exported="false">


没用呀。。。。

我以前不会报这样的错
后面升级了SDK 到19版就会这样子的现象

#9


引用楼主  的回复:
这个警告出现在android工程中的AndroidManifest.xml中,那位谁能说说这是什么原因啊?!


我也有这样的问题,,,不知道怎么解决,,但是只是个警告,对程序没啥影响

#10


引用 9 楼  的回复:
引用楼主 的回复:
这个警告出现在android工程中的AndroidManifest.xml中,那位谁能说说这是什么原因啊?!


我也有这样的问题,,,不知道怎么解决,,但是只是个警告,对程序没啥影响

只是想弄明白为什么会有这个警告,出现了这个警告总是想弄明白原因

#11


缺少权限限制
这是一个可以被其他程序访问的Service,需要声明一个权限保护你的service

#12


引用 11 楼  的回复:
缺少权限限制
这是一个可以被其他程序访问的Service,需要声明一个权限保护你的service

要声明个什么权限?

#13


结过贴了也给你答案!
就是同时在<service>和 <action>中加入android:exported="false",就可以了!如下:
<service android:name=".serviec.MusicPlayerService" android:exported="false">
  <intent-filter>
  <action android:name="com.wind.MusicService"android:exported="false"/>
  <action android:name="com.wind.serviceaction"/>
  <category android:name="android.intent.category.LAUNCHER"/>
  </intent-filter>
  </service>

#14


引用 13 楼  的回复:
结过贴了也给你答案!
就是同时在<service>和 <action>中加入android:exported="false",就可以了!如下:
<service android:name=".serviec.MusicPlayerService" android:exported="false">
  <intent-filter>
  <action android:name="com……

谢谢你啊!

#15


引用 13 楼  的回复:
结过贴了也给你答案!
就是同时在<service>和 <action>中加入android:exported="false",就可以了!如下:
<service android:name=".serviec.MusicPlayerService" android:exported="false">
  <intent-filter>
  <action android:name="com……

谢谢你啊!

#16


我的也出现这个问题了 同时还有 can not dispatch DDM chunk ,Application is not installed on your phone 。
最后把别的manifest文件拷过来才可以,但是我的activity 是最简单的,文件内容也都一样啊

#17


引用 13 楼  的回复:
结过贴了也给你答案!
就是同时在<service>和 <action>中加入android:exported="false",就可以了!如下:
<service android:name=".serviec.MusicPlayerService" android:exported="false">
  <intent-filter>
  <action android:name="com……


在网上查到的:android:exported 这个属性用于指示该服务是否能够被其他应用程序组件调用或跟它交互。如果设置为true,则能够被调用或交互,否则不能。设置为false时,只有同一个应用程序的组件或带有相同用户ID的应用程序才能启动或绑定该服务。

我想问在设置为true的情况下,如何使该服务被其他应用程序组件调用或交互呢,用AIDL吗?我写过AIDL的demo小程序也没有设置过这个属性啊。。

#18


先在<manifest>标签下加入

<permission android:protectionLevel="normal" android:name="oem.permission.SENDMAIL"></permission>

然后在<service>标签下

android:permission="oem.permission.SENDMAIL"

  不解释~  你明白的~

#19


<service />中定义了intent-filter的话,android:exported属性值默认为true,而你的<service />定义中没有指定访问权限,其他程序不需要申请权限便可以启动这个service,因而有这个安全警告。

#20


只需要在用到service的地方换句代码
startService(new  Intent(MainActivity.this,Service_Player.class));

#21


引用 20 楼 u014311531 的回复:
只需要在用到service的地方换句代码
startService(new  Intent(MainActivity.this,Service_Player.class));

然后把androidmanifest里面的<intent-filter>删掉就行

#22


把 android:exported该改为 false 也不会有提示的,这种方法是限制外部访问,自然不需要权限了

#23


感觉19楼是正解……