Как создать файл с расширением.aidl?
У меня есть следующие вопросы
- Нужно ли создавать простой файл с расширением.aidl?
- Я прочитал, что будет создан соответствующий файл.java, но в моем случае, когда я создал файл.aidl, я не смог найти такой файл.java
- Есть ли какая-то конкретная папка, где мне нужно создать этот файл.aidl.
4 ответа
Решение
Создайте файл.aidl для объектов, которые будут передаваться через IBinder. Вам следует создать файл.aidl в том же пакете, что и объект Java, который он определяет.
Google Developer, язык определения интерфейса Android (AIDL)
public void onStart(){
super.onStart();
Intent intent=new Intent(MainActivity.this, RemoteService.class);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
}
public void onServiceConnected(ComponentName className, IBinder service) {
mIsum=Isum.Stub.asInterface((IBinder)service);
mBound=true;
}
/********************Application 1 Isum.aidl*****************
package com.example.Isum;
interface Isum{
int sum(int a, int b);
}
/***********************Application 1*********Don't do anything in main
/********create service class*********remote service
public class RemoteService extends Service{
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
@Override
public void onCreate(){
super.onCreate();
}
@Override
public void onDestroy(){
super.onDestroy();
}
private final Isum.Stub mBinder=new Isum.Stub() {
@Override
public int sum(int a, int b) throws RemoteException {
int c=a+b;
return c;
}
};
**********************Application 2 Main activity*********
public class MainActivity extends Activity {
private Isum msum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnSum=(Button)findViewById(R.id.btnResult);
btnSum.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
bindService(new Intent("com.example.serviceprovider.RemoteService"),
mConnection, Context.BIND_AUTO_CREATE);
EditText FirstNo=(EditText)findViewById(R.id.ETfirstNo);
EditText SecondNo=(EditText)findViewById(R.id.ETSecondNo);
int a=Integer.parseInt(FirstNo.getText().toString());
System.out.println("###########"+a);
int b=Integer.parseInt(SecondNo.getText().toString());
try {
int c=msum.sum(a, b);
System.out.println("***********************"+c);
Toast.makeText(MainActivity.this, c, Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
private ServiceConnection mConnection=new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName arg0, IBinder arg1) {
msum=Isum.Stub.asInterface(arg1);
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
msum=null;
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
/****************include this in mainfest file
<service android:name="RemoteService">
<intent-filter>
<action android:name="com.example.serviceprovider.RemoteService"/>
</intent-filter>
</service>
Вот мой ответ:
- Если вам нужно создать службу, вам нужно создать файл.aidl, чтобы сначала определить API.
- Если вы создали файл.aidl, ADT автоматически создаст соответствующий файл.java в папке gen/your-package-name.
Нет. После создания файла вы должны выполнить следующие действия:
а. определить API в.aidl
б. создать свой сервис, который расширяется от класса обслуживания Android
с. создайте экземпляр, который реализует XXX.Stub (XXX - это ваше имя файла.aidl)
д. связать свой сервис
Надеюсь, поможет.