<service>标记的清单名称属性

时间:2016-12-22 09:30:49

标签: java android

根据清单元素中的documentation

<service android:name=".PrinterService" 

应该是Service子类的指定名称。我的子类名为PrinterService,定义如下

package arrowsys.vrp.print;

#import
public class PrinterService extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    public class PrinterSession extends PrinterDiscoverySession {
    }
}

当我输入属性名称.PrinterService时,我得到了

  

无法解析符号

.service.PrinterService我得

  

预期AidleType包,得到'。'

编辑以使其更简单,我删除了文件夹arrowsys.vrp.printer / service,因此我的PrinterService.java直接在arrowsys.vrp.printer中。

现在包定义为package arrowsys.vrp.print;

完成AndroidManifest.xaml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="arrowsys.vrp.print">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service
            android:name="arrowsys.vrp.print.PrinterService"
            android:description="@string/app_name"
            android:permission="android.permission.BIND_PRINT_SERVICE" >
            <intent-filter>
                <action android:name="android.vrp.print.PrinterService" />
            </intent-filter>
        </service>
    </application>
</manifest>

2 个答案:

答案 0 :(得分:0)

根据App Manifest Documentation,您必须包含完整的程序包路径,否则您的服务应该是应用程序包的子项

  

如果定义子类,就像组件类(Activity,Service,BroadcastReceiver和ContentProvider)几乎总是那样,子类是通过name属性声明的。名称必须包括完整的包装名称。例如,Service子类可能声明如下:

<manifest . . . >
<application . . . >
    <service android:name="com.example.project.SecretService" . . . >
        . . .
    </service>
    . . .
</application>

  

但是,如果字符串的第一个字符是句点,则应用程序的包名称(由元素的包属性指定)将附加到字符串中。

<manifest package="com.example.project" . . . >
<application . . . >
    <service android:name=".SecretService" . . . >
        . . .
    </service>
    . . .
</application>

我的猜测是你的Manifest包不是arrowsys.vrp.print,所以你必须使用<service android:name="arrowsys.vrp.print.service.PrinterService">

答案 1 :(得分:0)

<service android:name="arrowsys.vrp.print.service.PrinterService">