Java 如何绑定活动hostapduservice
我想在activity和HostApduService之间建立通信。我没有成功地在两者之间进行双向通信,Java 如何绑定活动hostapduservice,java,android,android-service,android-service-binding,Java,Android,Android Service,Android Service Binding,我想在activity和HostApduService之间建立通信。我没有成功地在两者之间进行双向通信,HostApduService的OnBind被声明为final,我们只是将通知用于它们之间的通信。到目前为止,我刚刚成功地建立了从HostApduService到Activity的通信 我的活动课 public class MainActivity extends Activity { private static final String TAG = MainActivity.class
HostApduService
的OnBind
被声明为final
,我们只是将通知用于它们之间的通信。到目前为止,我刚刚成功地建立了从HostApduService到Activity的通信
我的活动课
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
boolean transactionFinished = bundle.getBoolean(HosService.COMMUNICATION_FINISHED);
String hceServiceMessage = bundle.getString(HostService.APDU_LOG);
Toast.makeText(MainActivity.this,
transactionFinished ? "HCE Transaction accomplished!" : "HCE Transaction in progress!",
Toast.LENGTH_LONG).show();
TextView t = (TextView) MainActivity.this.findViewById(R.id.textView2);
t.setText(hceServiceMessage);
t.refreshDrawableState();
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onResume() {
super.onResume();
registerReceiver(receiver, new IntentFilter(HostService.NOTIFICATION));
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(receiver);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
// getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
return super.onOptionsItemSelected(item);
}
还有我的服务课:
public class HostService extends HostApduService {
private static final String TAG = HostService.class.getSimpleName();
private static boolean secureSessionInProgress = false;
private static List<String> secureSessionApdu = new ArrayList<String>();
private static String transactionLog = "";
public static final String NOTIFICATION = "net.hce";
public static final String COMMUNICATION_FINISHED = "finished";
public static final String APDU_LOG = "apdu";
public HostService() {
}
@Override
public byte[] processCommandApdu(byte[] cmd_bytes, Bundle bundle) {
byte[] resp_bytes = null;
// ***********************************
// Here I want to exchange data with activity
// Intent intent = new Intent(NOTIFICATION);
// intent.putExtra (APDU_LOG, finishedTransactionLog);
// intent.putExtra(COMMUNICATION_FINISHED, communicationFinished);
// sendBroadcast(intent);
// ...
// How to get info from activity??
// ************************************
transactionLog += "> ";return resp_bytes;
}
@Override
public void onDeactivated(int reason) {
secureSessionInProgress = false;
Log.d(TAG, "deactivated. reason=" + reason);
transactionLog = "";
}
公共类HostService扩展了HostApduService{
私有静态最终字符串标记=HostService.class.getSimpleName();
私有静态布尔secureSessionInProgress=false;
私有静态列表secureSessionApdu=newarraylist();
私有静态字符串transactionLog=“”;
公共静态最终字符串通知=“net.hce”;
公共静态最终字符串通信\u FINISHED=“FINISHED”;
公共静态最终字符串APDU_LOG=“APDU”;
公共服务{
}
@凌驾
公共字节[]processCommandApdu(字节[]cmd_字节,捆绑包){
byte[]resp_bytes=null;
// ***********************************
//这里我想与活动交换数据
//意向=新意向(通知);
//intent.putExtra(APDU_日志、完成的交易日志);
//意图.额外输入(通信完成,通信完成);
//发送广播(意图);
// ...
//如何从活动中获取信息??
// ************************************
transactionLog+=“>”返回相应字节;
}
@凌驾
已激活公共无效(内部原因){
secureSessionInProgress=false;
Log.d(标签“deactivated.reason=“+reason”);
transactionLog=“”;
}
}