Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 20 июн 2018, 10:27

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: 26 апр 2016, 18:28 

Зарегистрирован: 11 фев 2016, 19:48
Сообщений: 5
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Как отправить данные в уже работающий сервис?
activity_main.xml

Код: [ Загрузить ] [ Скрыть ]
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout 
  3.     xmlns:android="http://schemas.android.com/apk/res/android" 
  4.     android:layout_width="fill_parent" 
  5.     android:layout_height="fill_parent" 
  6.     android:orientation="vertical"> 
  7.  
  8.     <Button 
  9.         android:id="@+id/btnStart" 
  10.         android:layout_width="wrap_content" 
  11.         android:layout_height="wrap_content" 
  12.         android:onClick="onClickStart" 
  13.         android:text="@string/start"> 
  14.     </Button> 
  15.  
  16.     <EditText 
  17.         android:layout_width="match_parent" 
  18.         android:layout_height="wrap_content" 
  19.         android:id="@+id/editText1" 
  20.         android:text="3" /> 
  21.  
  22.     <EditText 
  23.         android:layout_width="match_parent" 
  24.         android:layout_height="wrap_content" 
  25.         android:id="@+id/editText2" /> 
  26. </LinearLayout> 


MainActivity.java
Код: [ Загрузить ] [ Скрыть ]
  1. package com.example.my.myapplication; 
  2. import android.app.Activity; 
  3. import android.content.BroadcastReceiver; 
  4. import android.content.Context; 
  5. import android.content.Intent; 
  6. import android.content.IntentFilter; 
  7. import android.os.Bundle; 
  8.  
  9. import android.view.View; 
  10. import android.widget.EditText; 
  11.  
  12.  
  13. public class MainActivity extends Activity { 
  14.  
  15.     public final static String BROADCAST_ACTION = "com.example.my.myapplication"; 
  16.  
  17.     BroadcastReceiver br; 
  18.     EditText EditText1; 
  19.     EditText EditText2; 
  20.  
  21.     /** Called when the activity is first created. */ 
  22.     @Override 
  23.     public void onCreate(Bundle savedInstanceState) { 
  24.         super.onCreate(savedInstanceState); 
  25.         setContentView(R.layout.activity_main); 
  26.  
  27.         EditText1 = (EditText) findViewById(R.id.editText1); 
  28.         EditText2 = (EditText) findViewById(R.id.editText2); 
  29.  
  30.         // создаем BroadcastReceiver 
  31.         br = new BroadcastReceiver() { 
  32.             // действия при получении сообщений 
  33.             public void onReceive(Context context, Intent intent) { 
  34.                 int result = intent.getIntExtra("result", 0); 
  35.                 String re = Integer.toString(result); 
  36.                 EditText2.setText(re); 
  37.             } 
  38.         }; 
  39.         // создаем фильтр для BroadcastReceiver 
  40.         IntentFilter intFilt = new IntentFilter(BROADCAST_ACTION); 
  41.         // регистрируем (включаем) BroadcastReceiver 
  42.         registerReceiver(br, intFilt); 
  43.  
  44.  
  45.         Intent intent; 
  46.  
  47.         // Создаем Intent для вызова сервиса, 
  48.         // кладем туда параметр времени и код задачи 
  49.         int s = Integer.parseInt(EditText1.getText().toString()); 
  50.         intent = new Intent(this, MyService.class).putExtra("time", s); 
  51.         intent.putExtra("time", s); 
  52.         // стартуем сервис 
  53.         startService(intent); 
  54.     } 
  55.  
  56.     @Override 
  57.     protected void onDestroy() { 
  58.         super.onDestroy(); 
  59.         // дерегистрируем (выключаем) BroadcastReceiver 
  60.         unregisterReceiver(br); 
  61.     } 
  62.  
  63.     public void onClickStart(View v) { 
  64.         Intent intent; 
  65.         int s = Integer.parseInt(EditText1.getText().toString()); 
  66.         intent = new Intent(this, MyService.class).putExtra("time", s); 
  67.         intent.putExtra("time", s); 
  68.     } 
  69.  


MyService.java

Код: [ Загрузить ] [ Скрыть ]
  1. package com.example.my.myapplication; 
  2.  
  3. import java.util.concurrent.ExecutorService; 
  4. import java.util.concurrent.Executors; 
  5. import java.util.concurrent.TimeUnit; 
  6. import android.app.Service; 
  7. import android.content.Intent; 
  8. import android.os.IBinder; 
  9.  
  10. public class MyService extends Service { 
  11.  
  12.     ExecutorService es; 
  13.  
  14.     public void onCreate() { 
  15.         super.onCreate(); 
  16.         es = Executors.newFixedThreadPool(1); 
  17.     } 
  18.  
  19.     public void onDestroy() { 
  20.         super.onDestroy(); 
  21.     } 
  22.  
  23.     public int onStartCommand(Intent intent, int flags, int startId) { 
  24.  
  25.         int time = intent.getIntExtra("time", 1); 
  26.         MyRun mr = new MyRun(startId, time); 
  27.         es.execute(mr); 
  28.  
  29.         return super.onStartCommand(intent, flags, startId); 
  30.     } 
  31.  
  32.     public IBinder onBind(Intent arg0) { 
  33.         return null; 
  34.     } 
  35.  
  36.     class MyRun implements Runnable { 
  37.  
  38.         int time; 
  39.         int startId; 
  40.  
  41.         public MyRun(int startId, int time) { 
  42.             this.time = time; 
  43.             this.startId = startId; 
  44.         } 
  45.  
  46.         public void run() { 
  47.             Intent intent = new Intent(MainActivity.BROADCAST_ACTION); 
  48.             while (true) { 
  49.                 try { 
  50.                     // начинаем выполнение задачи 
  51.                     TimeUnit.SECONDS.sleep(time); 
  52.                     // сообщаем об окончании задачи 
  53.                     intent.putExtra("result", time * 100); 
  54.                     sendBroadcast(intent); 
  55.                 } catch (InterruptedException e) { 
  56.                     e.printStackTrace(); 
  57.                 } 
  58.             } 
  59.            // stop(); 
  60.         } 
  61.  
  62.         void stop() { 
  63.             stopSelfResult(startId); 
  64.         } 
  65.     } 


Что я хочу от приложения: при запуске стартует сервис, ему отправляется число он это число умножает на 100 и отправляет результат в активити во второе текстовое поле(причем продолжает работать дальше). Далее я хочу отправить сервису новое число, не останавливая его работу, ввожу новое число в первое тестовое поле, и при нажатии на кнопку надо отправить сервису это число, а он должен его так же умножить на 100 и отправить обратно в активити в первое текстовое поле. Не могу разобраться как передавать данные уже запущенному сервису. Подскажите.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 10 фев 2017, 08:40 

Зарегистрирован: 03 фев 2016, 19:26
Сообщений: 2
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
В onClickStart(View v) добавляешь startService(intent);
Если сервис уже запущен, то его onCreate() выполняться не будет, будет выполняться onStartCommand(...)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 31 май 2018, 10:46 
Аватар пользователя

Зарегистрирован: 24 апр 2018, 15:52
Сообщений: 17
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
У меня не получается... Что делать?


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB