如何将值从MainActivity传递到ServiceConnection?

时间:2019-06-10 17:41:26

标签: java android service inner-classes

我有一个MainActivity和一个private String attribute。在我的代码中,我有以下内容:

private ServiceConnection mTransactionServiceConnection = new ServiceConnection() {
    public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
        mTransactionService = IPoyntTransactionService.Stub.asInterface(iBinder);
        Log.d(TAG, "Transaction service connected");
        try {
            mTransactionService.getTransaction("fcf98959-c188-42d1-b085-786d21e552ac", UUID.randomUUID().toString(), mTransactionServiceListener);
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

    public void onServiceDisconnected(ComponentName componentName) {
        mTransactionService = null;
        Log.d(TAG, "Transaction service disconnected");
    }
};

fcf98959-c188-42d1-b085-786d21e552ac是硬编码的。我需要在MainActivity的属性中放入一个字符串。我怎样才能做到这一点?

我试图将字符串设为public,因为它是静态的,但是不起作用。

2 个答案:

答案 0 :(得分:0)

在您的服务中创建一个像设置器一样工作的函数,例如:

public void setValue(String value){
   this.value = value;
}

onServiceConnected()函数内部

并在您启动服务后从onServiceConnected()调用它,您可以使用其中的函数。

private ServiceConnection mTransactionServiceConnection = new ServiceConnection() {
    public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
        mTransactionService = IPoyntTransactionService.Stub.asInterface(iBinder);
        Log.d(TAG, "Transaction service connected");
         **mTransactionService.setValue(the value your want to set);**
        try {
            mTransactionService.getTransaction("fcf98959-c188-42d1-b085-786d21e552ac", UUID.randomUUID().toString(), mTransactionServiceListener);
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
    public void onServiceDisconnected(ComponentName componentName) {
        mTransactionService = null;
        Log.d(TAG, "Transaction service disconnected");
    }
};

这将更新服务的值。 您还可以从onServiceConnected外部使用服务功能,只需确保它不为空即可。

答案 1 :(得分:0)

问题不是很清楚。但是,据我了解,您可能会考虑在public static中使用一个MainActivity变量,该变量可在代码中的任何位置使用。

因此,请像attribute中一样定义MainActivity变量。

public static String attribute = "fcf98959-c188-42d1-b085-786d21e552ac";

现在按如下所示在ServiceConnection中使用它。

mTransactionService.getTransaction(MainActivity.attribute, UUID.randomUUID().toString(), mTransactionServiceListener);