从其他程序包启动Android服务

时间:2016-01-26 20:19:02

标签: service

当服务代码在另一个与主应用程序的MainActivity不同的包中时,我似乎无法启动我的android服务。

我尝试了很多方法,甚至是AIDL方法,我根本无法使用它。

MainActivity代码

ServiceIntent.setComponent(new ComponentName("com.service.luna","com.service.luna.VService" ));
bindService(ServiceIntent, mServiceConnection, Context.BIND_AUTO_CREATE);

MainActivty Manifest

<?xml version="1.0" encoding="utf-8"?>

<!-- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="19" /> This is set from Gradle -->
<!-- Needed for camera passthrough -->
<!--<uses-permission android:name="android.permission.CAMERA" />-->
<!-- Needed to write thumbs -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- Needed to for volume -->
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<!-- Needed for Google Play Services GPS -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.usb.host" />
<!-- Needed for uploading crash reports -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

<uses-feature android:glEsVersion="0x00030000" android:required="true" />
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name"
    android:hardwareAccelerated="true" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
    <meta-data android:name="com.samsung.android.vr.application.mode" android:value="vr_only" />
    <!-- singleTask launchMode because we never want multiple copies of the app running, -->
    <!-- but we might want to internally spawn other activities -->
    <!-- Theme.DeviceDefault.NoActionBar.Fullscreen gives solid black instead of a (bad stereoscopic) gradient on app transition -->
    <activity android:name="com.main.luna.MainActivity"
              android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
              android:label="@string/app_name"
              android:launchMode="singleTask"
              android:screenOrientation="landscape"
              android:configChanges="screenSize|orientation|keyboardHidden|keyboard"
              >
        <!-- this filter lets the apk show up as a launchable icon -->
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <action android:name="com.service.luna.VService" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <service android:name="com.service.luna.VService" android:process=":VServiceRemote" android:exported="true" android:enabled="true">
        <intent-filter>

            <action android:name="com.service.luna.VService"/>
            <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
            <action android:name="android.intent.action.USER_PRESENT" />
            <action android:name="android.intent.action.BOOT_COMPLETED" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </service>

    <receiver android:name="com.main.luna.ConnectivityChangeReceiver" >
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
        </intent-filter>
    </receiver>

</application>

服务代码

public class VService extends Service implements Serializable{

...

服务清单

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.service.luna">

<application
    android:allowBackup="true"
    android:label="@string/app_name"
    android:supportsRtl="true">


</application>

当我的代码最终运行时,我收到了

bindService callerProcessName:com.main.luna, calleePkgName: com.service.luna, action: null
Unable to start service Intent { pkg=com.service.luna cmp=com.service.luna/.VService } U=0: not found

主程序包的名称是com.main.luna,服务在com.service.luna包中

如果有人之前已经解决了这个问题,请告诉我。

1 个答案:

答案 0 :(得分:0)

尝试在添加服务时启用清单中的导出选项(android:exported =&#34; true&#34;)

  <service android:enabled=["true" | "false"]
     android:exported=["true" | "false"]
     android:icon="drawable resource"
     android:isolatedProcess=["true" | "false"]
     android:label="string resource"
     android:name="string"
     android:permission="string"
     android:process="string" >
. . .
  </service>

并确保使用包名称的正确名称

同时查看此帖有类似情况

How do I start a service which is defined in a different package?