本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术。在Android中启动Service时出现“undefined intent constructor”的错误,怎么办?html
问:Ramjava
我在Activity中尝试启动Service,但出现“undefined intent constructor”的报错信息。android
MyService.java代码以下:app
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
return
null
;
}
public static boolean isInstanceCreated() {
return
instance !=
null
;
}
@Override
public void onCreate() {
Toast.makeText(
this
,
"My Service Created"
, Toast.LENGTH_LONG).show();
Log.d(TAG,
"onCreate"
);
instance =
this
;
}
@Override
public void onDestroy() {
Toast.makeText(
this
,
"My Service Stopped"
, Toast.LENGTH_LONG).show();
Log.d(TAG,
"onDestroy"
);
instance =
null
;
}
@Override
public void onStart(Intent intent, int startid) {
Toast.makeText(getBaseContext(),
"Service started"
,Toast.LENGTH_SHORT).show();
}
}
|
启动SampleService.java的代码以下:ide
1
2
3
4
5
6
7
8
9
|
public class SampleService extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.grid_activity);
Intent myintent =
new
Intent(SampleService.
this
,MyService.
this
);
//Error show here..
startService(myintent);
}
}
|
在manifest file中设定service的初值以下:函数
1
|
<service android:enabled=
"true"
android:name=
"com.MyApp.MyService"
/>
|
请你们帮我解决这个错误。学习
答:kalyan pvsthis
你不该该使用Service.this,而应该按以下方法改变class:spa
1
|
Intent myintent =
new
Intent(SampleService.
this
,MyService.Class);
|
作以下调整:
1
|
Intent myintent =
new
Intent(SampleService.
this
,MyService.
this
);
|
变为:
1
2
|
Intent myintent =
new
Intent(SampleService.
this
,MyService.Class);
// first param is a context second param is a class in your case a MyServiceClass
|
你没有设置相似于Intent(SampleService, MyService)的构造函数,在intent constructor参数设定上出现错误。
1
2
3
4
5
6
7
8
9
10
|
public Intent (Context packageContext, Class<?> cls)
Added
in
API level 1
Create an intent
for
a specific component. All other fields (action, data, type, class) are
null
, though they can be modified later
with
explicit calls. This provides a convenient way to create an intent that is intended to execute a hard-coded class name, rather than relying on the system to find an appropriate class
for
you; see setComponent(ComponentName)
for
more information on the repercussions of
this
.
Parameters
packageContext A Context of the application package implementing
this
class.
cls
The component class that is to be used
for
the intent.
|
文章选自StackOverFlow社区,鉴于其内容对于开发者有所帮助,现将文章翻译于此,供你们参考及学习。9Tech将每日持续更新,读者可点击StackOverflow(简称:SOF)精选问答汇总,查看所有译文内容。同时,咱们也招募志同道合的技术朋友共同翻译,造福你们!报名请发邮件至zhangqi_wj@cyou-inc.com。