我在这个问题上已经挣扎了两天。 我有两个应用程序并尝试通过Messenger IPC进行通信,但它甚至无法绑定到服务器应用程序的服务。
---服务器端
<service android:name="com.example.RemoteService" android:exported="true">
</service>
</application>
- 客户端
@Override
protected void onCreate(Bundle savedInstanceState) {
:
this.connection = new RemoteServiceConnection();
@Override
public void onStart() {
:
Intent intent = new Intent();
intent.setClassName("com.example.client", "com.example.RemoteService");
//Intent i = new Intent("com.example.RemoteService");
//i.setPackage(this.getPackageName());
boolean ret = bindService(intent , this.connection, Context.BIND_AUTO_CREATE);
ret始终为false并始终接收系统消息 W / ActivityManagerService:无法启动服务Intent { act = com.example.RemoteService pkg = com.example.client} U = 0:未找到
似乎一切都可以实现。我觉得这是层层问题。请帮忙。
由于
这是服务类
public class RemoteService extends Service
{
private Messenger messenger; //receives remote invocations
@Override
public IBinder onBind(Intent intent)
{
if(this.messenger == null)
{
synchronized(RemoteService.class)
{
if(this.messenger == null)
{
this.messenger = new Messenger(new IncomingHandler());
}
}
}
//Return the proper IBinder instance
return this.messenger.getBinder();
}
private class IncomingHandler extends Handler
{
@Override
public void handleMessage(Message msg)
{
System.out.println("*****************************************");
System.out.println("Remote Service successfully invoked!!!!!!");
System.out.println("*****************************************");
int what = msg.what;
Toast.makeText(RemoteService.this.getApplicationContext(), "Remote Service invoked-("+what+")", Toast.LENGTH_LONG).show();
//Setup the reply message
Message message = Message.obtain(null, 2, 0, 0);
try
{
//make the RPC invocation
Messenger replyTo = msg.replyTo;
replyTo.send(message);
}
catch(RemoteException rme)
{
//Show an Error Message
Toast.makeText(RemoteService.this, "Invocation Failed!!", Toast.LENGTH_LONG).show();
}
}
}
}
答案 0 :(得分:1)
尝试像这样开始你的服务
startService(new Intent(this, YourService.class));
不要忘记在您的清单中添加您的服务,
<application>
<service
android:name=".MyService"
>
</service>
</application>
答案 1 :(得分:0)
有时,如果找不到任何错误代码,则可以尝试重新启动设备。可以解决这个问题。
答案 2 :(得分:0)
setClassName
将包名和类名作为参数:
intent.setClassName("com.example.client", "com.example.RemoteService");
如果包名称为com.example.client,则类名称应为RemoteService
或com.example.client.RemoteService
您还可以检查软件包是否出现在以下位置: /data/data/com.example ....
仅由于找不到包/类而发生此错误