美文网首页
使用AIDL获取服务器的C++字符串

使用AIDL获取服务器的C++字符串

作者: Android初学者 | 来源:发表于2017-11-23 11:22 被阅读0次

先搭建服务器

创建AIDL文件

interface IGetCppStringInterface {

String getCppString();

}

服务器中加载C++库

public class GetCppStringService extends Service {

// 静态代码块中加载C++库

static {

System.loadLibrary("native-lib");

}

class MyBinder extends IGetCppStringInterface.Stub {

@Override

public String getCppString() throws RemoteException {

return stringFromJNI2();

}

}

@Override

public IBinder onBind(Intent intent) {

return new MyBinder();

}

// C++的方法,记得用native修饰

public native String stringFromJNI2();

}

服务器主页面代码

/**

* AIDL服务端、NDK环境搭建

* 使用AIDL访问当前服务端中C++的字符串

*/

public class MainActivity extends AppCompatActivity {

// 静态代码块中加载C++库

static {

System.loadLibrary("native-lib");

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// Example of a call to a native method

TextView tv = (TextView) findViewById(R.id.sample_text);

tv.setText(stringFromJNI());

}

// C++的方法,记得用native修饰

public native String stringFromJNI();

}

创建客户端

将在服务中创建的AIDL复制到客户端,然后客户端代码实现

/**

* 初始化视图

* 绑定服务端的Service

* 通过接口ServiceConnection获取aidl实例

* 按钮中使用aidl实例获取服务端中C++的字符串

*/

public class MainActivity extends AppCompatActivity implements View.OnClickListener, ServiceConnection {

protected Button mGetCppStringBtn;

protected TextView mTextView;

private IGetCppStringInterface mIGetCppStringInterface;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

super.setContentView(R.layout.activity_main);

initView();

bindService();

}

@Override

public void onClick(View view) {

if (view.getId() == R.id.get_cpp_string_btn) {

try {

String cppString = mIGetCppStringInterface.getCppString();

mTextView.setText(cppString);

} catch (RemoteException e) {

e.printStackTrace();

Toast.makeText(this, "错误", Toast.LENGTH_SHORT).show();

}

}

}

private void initView() {

mGetCppStringBtn = (Button) findViewById(R.id.get_cpp_string_btn);

mGetCppStringBtn.setOnClickListener(MainActivity.this);

mTextView = (TextView) findViewById(R.id.text_view);

}

private void bindService() {

Intent intent = new Intent("get_cpp_action");

intent.setPackage("net.bwie.monthexam");

boolean isBindSuccessful = bindService(intent, this, Context.BIND_AUTO_CREATE);

Toast.makeText(this, "是否成功:"+ isBindSuccessful, Toast.LENGTH_SHORT).show();

}

@Override

public void onServiceConnected(ComponentName name, IBinder iBinder) {

mIGetCppStringInterface = IGetCppStringInterface.Stub.asInterface(iBinder);

}

@Override

public void onServiceDisconnected(ComponentName name) {

}

}

相关文章

网友评论

      本文标题:使用AIDL获取服务器的C++字符串

      本文链接:https://www.haomeiwen.com/subject/toxzvxtx.html