错误日志:
Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=m4 (has extras) }
at android.app.ContextImpl.validateServiceIntent(ContextImpl.java:1809)
at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1838)
at android.app.ContextImpl.startService(ContextImpl.java:1822)
at android.content.ContextWrapper.startService(ContextWrapper.java:516)
at myapplication.com.canvas.MainActivity.start(MainActivity.java:24)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)
at android.view.View.performClick(View.java:4793)
at android.view.View$PerformClick.run(View.java:19960)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5593)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:967)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
补充代码:
<1> 配置文件:
<service android:name=".service.FirstService" > <intent-filter> <action android:name="m4" /> </intent-filter> </service>
<2>
public class FirstService extends Service { /* * intent:startServcie(it)传入的值 * startId:启动服务的次数序号 * */ @Override public int onStartCommand(Intent intent, int flags, int startId) { int x = intent.getIntExtra("x", 0); //System.out.println("--"+startId+"--"+x); if (x==88) { //停止服务 stopSelf(); } return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); System.out.println("--onDestroy"); } @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } }
<3>
public class MainActivity extends AppCompatActivity { TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void start(View v){ Intent it=new Intent(); it.setAction("m4"); it.putExtra("x", 88); startService(it); } }
错误修改:
public void start(View v){ Intent it=new Intent(); it.setAction("m4"); it.putExtra("x", 88); it.setPackage("myapplication.com.canvas");//应用的包名 startService(it); }