2015-01-04 3 views
1

를 보내는 나는 방송이 지속적으로 AsyncTask를를 사용하고 난 다음과 같은 문제를 찾는거야 보내려고합니다.안드로이드 AsyncTask를하고 방송

2) 나는 프로그램이 더 메신저가 방송 모니터 APP 확인하기 위해 사용이 아닌, 내 방송을 전송 없다고 생각한다

것은 여기 내 코드입니다.

public class MainActivity extends Activity implements OnClickListener { 

private Button sosButton, cancelButton; 
private messageInABottle Sting; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    sosButton = (Button) findViewById(R.id.sosButton); 
    sosButton.setOnClickListener(this); 
    cancelButton = (Button) findViewById(R.id.cancelButton); 
    cancelButton.setOnClickListener(this); 

    // a little more code 
} 
@Override 
public void onClick(View v) { 

    switch (v.getId()) { 
    case R.id.cancelButton: 
     if(!Sting.isCancelled()) 
      Sting.cancel(true); 
    break; 
    case R.id.sosButton: 
     Sting = (messageInABottle) new messageInABottle().execute("") ; 
    break;}} 

private class messageInABottle extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 

     String mourseMessage = "...---..."; 
     final String KEY_INTENT_SOS = "I_SEND_A_SOS_TO_THE_WORLD"; 



     Intent intent = new Intent(KEY_INTENT_SOS); 
     intent.putExtra("SOS", mourseMessage); 


     while (true) 
     { 
      sendBroadcast(intent); 
      if (isCancelled()) 
       break; 
     } 

     return null; 

    } 

    @Override 
    protected void onPostExecute(String result) { 
     Toast.makeText(getApplicationContext(), 
       "Stop SOS..", 
       Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    protected void onPreExecute() { 
     Toast.makeText(getApplicationContext(), 
       "Sendin SOS..", 
       Toast.LENGTH_SHORT).show(); 

    } 

    @Override 
    protected void onCancelled(){ 
     Toast.makeText(getApplicationContext(), "Cancel SOS..." ,Toast.LENGTH_SHORT).show(); 
    } 
}} 



@Override 
public void onStop() { 
    super.onStop(); 
    if(!Sting.isCancelled()) 
     Sting.cancel(true); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if(!Sting.isCancelled()) 
     Sting.cancel(true); 
} 

답변

0

1 부 : 충돌이 발생할 때 logcat을 게시 할 수 있습니까? 그렇지 않으면 앱이 왜 충돌하는지 알 수 없습니까?

파트 2 : 코드를 사용해 보았는데 등록 된 브로드 캐스트 리시버에서 onReceive()가 호출되는 것을 볼 수있었습니다. (나는 Log.i 문을 onReceive()에 배치했다.

다음을 확인할 수 있습니다. 1. BroadcastReceiver가 등록되어 있습니까? XML 또는 JAVA 코드 중 하나? 2. 올바른 인 텐트 필터를 적용 했습니까? 이 특정 코드에서, 나는 의도 필터 아래 사용

<receiver android:name="MyBroadcastReceiver"> 
      <intent-filter> 
       <action android:name="I_SEND_A_SOS_TO_THE_WORLD" />     
      </intent-filter>     
</receiver> 

MainActivity.java

@Override 
    public void onClick(View v) { 

     Log.e("onClick", "onClick"); 
     switch(v.getId()){ 
     case R.id.startAsyncTask: 
      //need to start the Asynctask here 
      mAsyncTask = (MyAsyncTask)new MyAsyncTask().execute(""); 
      //mAsyncTask.execute(""); 
     } 

    } 

    private class MyAsyncTask extends AsyncTask<String, Void, String> { 

     @Override 
     protected String doInBackground(String... params) { 
      // TODO Auto-generated method stub 
      Log.e("doInBackground*****************************", "MyAsyncTask"); 
      String message = "This string will be the message"; 
      final String KEY_INTENT_SOS = "I_SEND_A_SOS_TO_THE_WORLD"; 
      Intent intent = new Intent(KEY_INTENT_SOS); 
      intent.putExtra("SOS", message); 

      sendBroadcast(intent); 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      Log.e("onPostExecute", "MyAsyncTask"); 
     } 

     @Override 
     protected void onPreExecute() { 
      Log.e("onPreExecute--", "MyAsyncTask"); 
     } 

     @Override 
     protected void onCancelled(){ 
      Log.e("onCancelled", "MyAsyncTask"); 
     } 

    } 

을 내가 테스트를 위해 while 루프를 제거했습니다.

MyBroadcastReceiver.java

public class MyBroadcastReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction() == "I_SEND_A_SOS_TO_THE_WORLD"){ 
      Log.e("MyBroadcastReceiver" , "onReceive ============================"); 
     } 

    } 

}