简单服务不会绑定:bindService返回false,从不触发服务连接

时间:2015-07-22 11:08:00

标签: java android service android-service android-service-binding

这是我第一次在Android中使用Service,而我的服务不会绑定。

服务代码:

package mackosoft.almightymessage;
public final class MainService extends Service {
    private final static String TAG = "Main Service";
    private final IBinder binder = new MainServiceBinder();

    @Override
    public final void onCreate() {
        super.onCreate();
        Log.d(TAG, "Service created");
        Toast.makeText(this, "Service created", Toast.LENGTH_SHORT).show();
    }

    @Override
    public final int onStartCommand(final Intent intent, final int flags, final int startId) {
        return START_STICKY;
    }


    @Override
    public final void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "Service created");
        Toast.makeText(this, "Service destroyed", Toast.LENGTH_SHORT).show();
    }


    @Override
    public final IBinder onBind(final Intent intent) {
        Toast.makeText(this, "Service binded", Toast.LENGTH_SHORT).show();
        return this.binder;
    }

public final class MainServiceBinder extends Binder {
        final MainService getService() {
            return MainService.this;
        }
    }
}

清单文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="mackosoft.almightymessage" >

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_logo"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <activity
        android:name=".MainActivity"
        android:configChanges="orientation|keyboardHidden"
        android:icon="@drawable/ic_logo"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <service
        android:name=".MainService"
        android:enabled="true" >
    </service>

</Application
</manifest>

最后,我尝试绑定服务的MainActivity中的部分:

public final class MainActivity extends AppCompatActivity {
@Override
protected final void onStart() {
        super.onStart();
        final Intent intent = new Intent(MainActivity.this, MainService.MainServiceBinder.class);
        final boolean status = bindService(intent, this.connection, Context.BIND_AUTO_CREATE);
        Log.d(TAG, "Service binded ? " + status);
    }

 private final ServiceConnection connection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            Log.d(TAG, "Service connected !");
            service = ((MainService.MainServiceBinder) iBinder).getService(); // service is a private member of MainActivity
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {
            Log.d(TAG, "Service disconnected !");
        }
    };
}

运行应用程序,Logcat显示:

mackosoft.almightymessage D/MainActivity﹕ Service binded ? false

永远不会触发服务连接!

我尝试了多种解决方案:

  1. 将绑定调用移至Button.onClick()并使用getApplicationContext()
  2. 直接使用getApplicationContext()
  3. 在Manifest中,更改了 - &gt; android:name="mackosoft.almightymessage.MainService"
  4. 同时更改了Intent - &gt; final Intent intent = new Intent(this, MainService.MainServiceBinder.class);
  5. 还尝试添加this.startService(intent)this.getApplicationContext()
  6. 以上所有内容均失败且日志中没有错误!

    我根本没有运气。

    测试设备:三星Galaxy Note 3运行Cyanogen模式12.1(Android 5.1)

    Android Studio 1.2.1.1(稳定版)

    感谢您的帮助!!

1 个答案:

答案 0 :(得分:1)

final Intent intent = new Intent(MainActivity.this, MainService.MainServiceBinder.class);

应该是

final Intent intent = new Intent(MainActivity.this, MainService.class);

有关详细信息,请参阅example provided in the docs