首先來看異描述信息:
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.localhostservice, PID: 10788
java.lang.IllegalStateException: Could not execute method for android:onClick
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:414)
at android.view.View.performClick(View.java:7147)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
at android.view.View.performClickInternal(View.java:7120)
at android.view.View.access$3500(View.java:804)
at android.view.View$PerformClick.run(View.java:27538)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7399)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:502)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:980)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409)
at android.view.View.performClick(View.java:7147)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
at android.view.View.performClickInternal(View.java:7120)
at android.view.View.access$3500(View.java:804)
at android.view.View$PerformClick.run(View.java:27538)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7399)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:502)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:980)
Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.example.roveservice }
at android.app.ContextImpl.validateServiceIntent(ContextImpl.java:1559)
at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1727)
at android.app.ContextImpl.bindService(ContextImpl.java:1651)
at android.content.ContextWrapper.bindService(ContextWrapper.java:705)
at android.content.ContextWrapper.bindService(ContextWrapper.java:705)
at com.example.localhostservice.MainActivity.bingService(MainActivity.java:26)
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409)
at android.view.View.performClick(View.java:7147)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
at android.view.View.performClickInternal(View.java:7120)
at android.view.View.access$3500(View.java:804)
at android.view.View$PerformClick.run(View.java:27538)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7399)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:502)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:980)
相信你們可能和我一樣都是一臉的懵逼,,說真我也不知道具體的是什么?出現這樣的異常因為反射目標沒有指定,對於API越高的,對於用戶的安全要求和機制越來越嚴格,如果不知道某一反射的包名,機會出現異常。
下面說說解決的方案:只需要在代碼中加入這一行代碼:
intent.setPackage("指定的包名");
例如:
public void bingService(View view){
Log.i(TAG,"觸發了綁定服務的方法");
Intent intent = new Intent("com.example.roveservice");
//intent.setPackage("com.example.roveservice");
conn = new MyConn();
bindService(intent,conn,BIND_AUTO_CREATE);
}
輕松解決此異常。