2015-11-26 2 views
2

Я довольно новичок в Java/Android Studio (и только что создал учетную запись здесь), поэтому извиняюсь заранее, если я говорю/пишу что-то неправильно.Как запустить MainActivity при запуске службы?

Так что я следующая проблема, у меня есть эта MainActivity.java (только часть кода ниже):

public class MainActivity extends Activity implements LocationListener{ 

public static final MediaType FORM_DATA_TYPE = MediaType.parse("application/x-www-form-urlencoded; charset=utf-8"); 
//URL derived from form URL 
public static final String URL = "..."; 
//input element ids found from the live form page 
public static final String LAT="entry_1903202747"; 
public static final String LONG="entry_1549783406"; 
public static final String MOD="entry_1161588883"; 
public static final String MAN="entry_852582911"; 
public static final String IMEI="entry_738564261"; 
public static final String EXIP="entry_1256979126"; 
public static final String ACC="entry_1601482207"; 

private Context context; 

LocationManager locationmanager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layout); 

    context=this; 

    Button button3 = (Button)findViewById(R.id.button3); 

    final TextView textView3 = (TextView) findViewById(R.id.textView3); 
    final TextView textView5 = (TextView) findViewById(R.id.textView5); 
    final TextView textView12 = (TextView) findViewById(R.id.textView12); 
    final TextView textView13 = (TextView) findViewById(R.id.textView13); 
    final TextView textView14 = (TextView) findViewById(R.id.textView14); 
    final TextView textView7 = (TextView) findViewById(R.id.textView7); 
    final TextView textView15 = (TextView) findViewById(R.id.textView15); 


    button3.setOnClickListener(new View.OnClickListener(){ 

     @Override 
       public void onClick(View v) { 
       PostDataTask postDataTask = new PostDataTask(); 

      postDataTask.execute(URL,textView3.getText().toString(),textView5.getText().toString(),textView12.getText().toString(),textView13.getText().toString(),textView14.getText().toString(),textView7.getText().toString(),textView15.getText().toString()); 

     } 
    }); 

и у меня есть MyService.java:

public class MyService extends Service 
{ 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) 
{ 
    Toast.makeText(this, "Service started...", Toast.LENGTH_LONG).show(); 
    return START_STICKY; 
} 

@Override 
public void onDestroy() 
{ 
    super.onDestroy(); 
    Toast.makeText(this, "Service destroyed...", Toast.LENGTH_LONG).show(); 
} 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 
} 

* EDIT

Текущее приложение отправляет данные в форму Google при нажатии кнопки «Отправить», но я хочу, чтобы приложение отправляло данные, когда оно работает в фоновом режиме, без нажатия кнопки «Отправить» на.

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

Я хочу что-то вроде этого (MyService.java):

@Override 
public int onStartCommand(Intent intent, int flags, int startId) 
{ 
    Toast.makeText(this, "Service started...", Toast.LENGTH_LONG).show(); 

    button3.setOnClickListener(new View.OnClickListener(){ 

     @Override 
       public void onClick(View v) { 
       PostDataTask postDataTask = new PostDataTask(); 

      postDataTask.execute(URL,textView3.getText().toString(),textView5.getText().toString(),textView12.getText().toString(),textView13.getText().toString(),textView14.getText().toString(),textView7.getText().toString(),textView15.getText().toString()); 

     } 
    }); 

    return START_STICKY; 
} 

Основной целью является выполнение "postDataTask" (от MainAcitivy) в MyService

+0

Пожалуйста, объясните, что означает «запустить код внутри MainActivity». – CommonsWare

+0

Я вставил часть своего «кода» в MainActivity. Поэтому я хочу, чтобы весь «код» запускался при запуске службы. –

+0

Я думаю, это зависит от того, что делает «код». Если он собирает некоторые данные из формы, вы можете сохранить эти данные где-нибудь, когда активность заходит на фон (статическая переменная использования событий), и служба может прочитать эти данные позже. Если «код» выполняет некоторую функцию полезности, вы можете перенести их в класс Utils. – duynt

ответ

2

я бы, вероятно, перенеся intentService вместо так он может отправлять данные в другой поток, чтобы вы не замедляли интерфейс. Но если вам нужно, чтобы служба зависала, тогда ваш подход одобрен, но я не понимаю, какова ваша цель. В любом случае, ваш точный вопрос:

Как запустить MainActivity при запуске службы?

. Служба - это тип контекста, поэтому вы можете начать с него работу. сделайте это:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) 
{ 
    Intent intent = new Intent(this, DisplayMessageActivity.class); 
    startActivity(intent); 

} 
+0

Я не знаю, как, но вам удалось понять, чего я хочу, D Спасибо! –

+0

Отличные новости. если вы в состоянии принять ответ, сделайте так, чтобы другие знали его решение и прекратили там усилия. – j2emanue

+0

все еще новый со всем этим, но спасибо за информацию! (принят ответ) –

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