Я давно смотрю на это, но я не могу исправить исключение Null Pointer Exception при попытке получить доступ к ResolveInfo.serviceInfo
на нулевом объекте. (Придется сделать явное намерение при запуске службы как API 20)Не удается bindService Android()
Вот интерфейс .aidl:
package com.example.playerclient;
interface AIDLinterface {
void Play_Clip(int id);
void Pause_Playback();
void Resume_Playback();
void Stop_Player();
}
Вот соответствующий код клиента (onResume()
находится где брошен NPE)
public class PlayerClientMain extends AppCompatActivity
{
Button button;
private AIDLinterface mAIDLinterface;
private boolean mIsBound = false;
private ServiceConnection mServiceConn = new ServiceConnection()
{
@Override
public void onServiceConnected(ComponentName componentName, IBinder iservice)
{
Log.v("SERVICE CONNECTED", "SERVICE CONNECTED");
mAIDLinterface = AIDLinterface.Stub.asInterface(iservice);
Toast.makeText(getApplicationContext(), "service connected", Toast.LENGTH_SHORT).show();
mIsBound = true;
}
@Override
public void onServiceDisconnected(ComponentName componentName)
{
Log.v("SERVICE DISCONNECTED", "SERVICE DISCONNECTED");
mAIDLinterface = null;
Toast.makeText(getApplicationContext(), "service disconnected", Toast.LENGTH_SHORT).show();
mIsBound = false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_player_client_main);
button = (Button) findViewById(R.id.button);
}
@Override
protected void onResume()
{
super.onResume();
if (!mIsBound)
{
boolean b = false;
Intent i = new Intent(AIDLinterface.class.getName());
ResolveInfo info = getPackageManager().resolveService(i, Context.BIND_AUTO_CREATE); //this is always null
i.setComponent(new ComponentName(info.serviceInfo.packageName, info.serviceInfo.name)); //NPE because info is null
b = bindService(i, this.mServiceConn, Context.BIND_AUTO_CREATE);
if (b)
Log.i("SUCCESS:", "bindService() success!");
else
Log.i("FAILURE:", "bindService() failed!");
}
}
}
Код услуги не имеет отношения к делу, так как я не могу дотянуться до линии bindService(). Есть идеи?
AIDLinterface не класс обслуживания. Интерфейс позволяет удаленному сервису связываться с моим локальным клиентом (PlayerClient). – user3487243
Спасибо за ответ, но это не помогло. Я больше не получаю NPE, но bindService() возвращает false – user3487243