2015-12-03 6 views
-1

У меня есть служба, которая имеет различные методы, и все, что они делают, это сообщение logcat, но эти методы, похоже, не вызываются, хотя я создал экземпляр этой службы в своей деятельности класс.

Мой класс Код услуги это-

Не удается вызвать методы службы из MainActivity

public class service extends Service { 
IBinder ob=new My_Ibinder(); 


public class My_Ibinder extends Binder{ 
    public service get_MyService(){ 
     return service.this; 
    } 

    } 


@Override 
public void onCreate() { 
    super.onCreate(); 
Log.e("SERVICE CREATED",""); 

} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.e("SERVICE OnStartCommand",""); 
    return super.onStartCommand(intent, flags, startId); 
} 

@Override 
    public IBinder onBind(Intent intent) { 
     Log.e("SERVICE onBind",""); 
     return ob; 
    } 


    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     Log.e("SERVICE DESTROYED",""); 
    } 

    String data(){ 
     Log.e("SERVICE data method",""); 

     return "DATA SUCCESSFULLY TRANSFERRED"; 
    } 

    public void ok(){ 
     Log.e("SERVICE ok method",""); 
    } 


} 


Вот методы, которые я называю это данные() и ОК().
Мой класс активности IS-

Button start,stop,data,check; 
    TextView tv; 
    service ser; 
    Boolean flag=false; 


protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     start=(Button)findViewById(R.id.start); 
     check=(Button)findViewById(R.id.check); 
     stop=(Button)findViewById(R.id.stop); 
     data=(Button)findViewById(R.id.data); 
     tv=(TextView)findViewById(R.id.tv); 

     start.setOnClickListener(new OnClickListener(){public void onClick(View v){ bindService(new Intent(MainActivity.this,service.class),sc,Context.BIND_AUTO_CREATE); }}); 
     stop.setOnClickListener(new OnClickListener(){public void onClick(View v){ unbindService(sc); flag=false; }}); 
     data.setOnClickListener(new OnClickListener(){public void onClick(View v){ ser.ok();tv.setText(ser.data());  }}); 
     check.setOnClickListener(new OnClickListener(){public void onClick(View v){  Log.e(""+flag,"sfsfsdfdssfsdffsdfs");  }}); 

    } 


    private ServiceConnection sc=new ServiceConnection(){ 

     @Override 
     public void onServiceConnected(ComponentName name, IBinder service) { 
      My_Ibinder ob=(My_Ibinder)service; 
      ser=ob.get_MyService(); 
      flag=true; 
     } 

     @Override 
     public void onServiceDisconnected(ComponentName name) { 
      flag=false; 
      ser=null; 
     } 

    }; 


При нажатии кнопки я не получаю сообщение LogCat. Ни из методов, которые мне нужно вызвать, ни из методов onCreate(), onBind() и onDestroy(), которые должны были быть вызваны, если служба успешно создана.

Я проверил запущенные процессы в настройках, и эта служба не существует.
Странно, если я запустил сервис с помощью startService (намерение), тогда он работает нормально (хотя я не могу с ним общаться). Я предполагаю, что есть некоторые проблемы с привязкой службы.
Просьба помочь.

+0

Вы положили услугу в свой манифест? –

+0

Да, я уже добавил –

ответ

1

Наконец-то получил ... Такая глупая глупая ошибка, которую я совершил. Предоставляя сообщение logcat, я не добавил к нему текстовый атрибут, и у него просто был тег. Теперь, когда я добавил текст к нему, он работает отлично. Такой маленький, но важный момент следует отметить. Конечно, мы все используем logcat-сообщения для DEBUG нашей программы, но на этот раз ПРОБЛЕМА была самой LOGCAT. Никогда не забуду этого!

0

См. http://developer.android.com/guide/components/aidl.html, чтобы сообщить об услуге.

+0

Но в документации говорится, что вы можете использовать любой из методов (связующее или вспомогательное средство) для связи с этой деятельностью. Я считаю, что связующее менее сложно. Не могли бы вы рассказать мне, где я ошибаюсь в коде. –

Смежные вопросы