我所描述的问题here,但我无法理解错误。
我的问题是:无法启动服务Intent {act = .connections.MoodyService} U = 0:找不到
修改 我已在源代码中将我的包从连接更改为服务,抱歉造成混淆
我的manifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.moody"
android:installLocation="auto"
android:versionCode="0"
android:versionName="0.6.7 alpha" >
<uses-sdk
android:maxSdkVersion="18"
android:minSdkVersion="14"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:allowClearUserData="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="activities.MainActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name="activities.Menu_esq"
android:label="@string/title_activity_menu_esq" >
</activity>
<activity
android:name="activities.BaseActivity"
android:label="@string/title_activity_base" >
</activity>
<activity
android:name="activities.MainView"
android:label="@string/title_activity_main_view" >
</activity>
<activity
android:name="activities.LoginActivity"
android:label="@string/app_name"
android:noHistory="true"
android:windowSoftInputMode="adjustResize|stateVisible" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.moody.LeftActivity"
android:label="@string/title_activity_left" >
</activity>
<activity
android:name="com.example.moody.RightActivity"
android:label="@string/title_activity_right" >
</activity>
<activity
android:name="activities.UserDetailsActivity"
android:label="@string/title_activity_user_details" >
</activity>
<activity
android:name="fragments.TopicsPreview"
android:label="@string/title_activity_copy_of_topics_preview" >
</activity>
<activity android:name="activities.Loading" >
</activity>
<service
android:name=".service.MoodyService"
android:icon="@drawable/ic_launcher"
android:label="@string/moody_service" >
</service>
</application>
服务是包,MoodyService是类名
我的服务类
public class MoodyService extends Service {
public MoodyService() {
// TODO Auto-generated constructor stub
}
private boolean isRunning = false;
Object getContent;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
// Announcement about starting
Toast.makeText(this, "Starting the Demo Service", Toast.LENGTH_SHORT)
.show();
// Start a Background thread
isRunning = true;
Thread backgroundThread = new Thread(new BackgroundThread());
backgroundThread.start();
// We want this service to continue running until it is explicitly
// stopped, so return sticky.
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
// Stop the Background thread
isRunning = false;
// Announcement about stopping
Toast.makeText(this, "Stopping the Demo Service", Toast.LENGTH_SHORT)
.show();
}
private class BackgroundThread implements Runnable {
int counter = 0;
public void run() {
try {
counter = 0;
while (isRunning) {
System.out.println("" + counter++);
new Contents().getAll(getResources(),
getApplicationContext());
Thread.currentThread().sleep(5000);
}
System.out.println("Background Thread is finished.........");
} catch (Exception e) {
e.printStackTrace();
}
}
}
在我的主要意图中。
Intent start = new Intent(".service.MoodyService");
this.startService(start);
并尝试了
Intent intent = new Intent(this, MoodyService.class);
this.startService(intent);
并尝试使用完整路径
<service
android:name="com.example.moody.service.MoodyService"
android:icon="@drawable/ic_launcher"
android:label="@string/moody_service" >
答案 0 :(得分:26)
<强>解决强>
我删除了清单中包名称开头的句点并且它有效,换句话说:
这不起作用:
.yourPackage.YourClass
但这确实有效:
yourPackage.YourClass
主要是:
Intent intent = new Intent(this, MoodyService.class);
this.startService(intent);
但它违背了the documentation中的内容:
android:name 实现服务的Service子类的名称。这应该是一个完全限定的类名(例如, “com.example.project.RoomService”)。但是,作为速记,如果 名称的第一个字符是句点(例如“.RoomService”), 它附加到指定的包名称中 元件。发布应用程序后,不应更改此设置 name(除非你设置了android:exported =“false”)。
没有默认值。必须指定名称。
答案 1 :(得分:16)
该服务也必须包含在清单:
中<service android:name="com.x.x.serviceclass"></service>
答案 2 :(得分:4)
我不知道您为什么使用类似于包的名称作为服务名称,但为什么不使用类名来启动服务呢?
Intent intent = new Intent(context, YourService.class);
context.startService(intent);
答案 3 :(得分:2)
我认为在清单包名称服务是错误的,因为你说你的包名是connections
所以它应该是这样的
android:name ="connections.MoodyService"
或
android:name="com.example.moody.connections.MoodyService"
调用服务
Intent intent = new Intent(this, MoodyService.class);
this.startService(intent);
答案 4 :(得分:1)
我的服务在“服务”包中,我的清单服务就像这样;
true
答案 5 :(得分:1)
确保您已在清单文件中声明了您的服务。
<service
android:name=".MyService"
android:enabled="true" >
</service>
并尝试编写getApplicationContext()而不是&#34;这个&#34;关键字
startService(new Intent(getApplicationContext(), MoodyService.class));
答案 6 :(得分:0)
您是否在服务中创建了一个空构造函数?
如果没有,请尝试。
还不确定你是否可以像这样使用Intent。您可以尝试'new Inten(this,MoodyService.class)'构造。
答案 7 :(得分:-3)
您是否尝试使用在Manifest中指定的android:名称?
Android Manifest:
<service
android:enabled="true"
android:name="UploadService" />
电话会是这样的:
Intent intent = new Intent("UploadService");