2017-04-09 8 views
0

startActivity関数の後にアプリケーションを返すようにしようとしています。私は何も返す必要はありません、私はちょうどstartActivityが呼び出されるのと同じポイントで継続するアプリケーションが必要です、理由は私がそれらの磁力計の変更を探している、そして検出されたときにアプリケーションを続行することができます。 私はこれを行う方法を見つけていない、私もstartActivityForResultを試みたが、netherは動作します。 startActivityまたはstartActivityForResultのいずれかを定義して、呼び出し元に戻るようにする方法はありますか? またはこれを行う他の方法。 アイブはいろいろな方法を試して何時間も過ごしましたが、何も動いていませんでした。startActivityForResultの後に戻る方法

Intent intent = new Intent(); 
intent.putExtra("SOMETHING", "EXTRAS"); 
this.setResult(RESULT_OK, intent); 
finish(); 

そして、あなたの親アクティビティに、ここで結果を取得します::このアクティビティの使用を終了するには

private void scanStart() { // was private added static 
    // 
    snloop=0; 
    if (startscan != 1) { 
     final Intent msens = new Intent(this, MldpBluetoothScanActivity.SensorActivity.class);           // Added by Chris 
     msens.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
     startActivityForResult(msens,snloop); 
    } 
    startscan =0; 
public static class SensorActivity extends Activity implements SensorEventListener { 
    private SensorManager mSensorManager; 
    private Sensor mMagnetometer; 
    private final float[] mMagnetometerReading = new float[3]; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
     mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); 

    } 
    @Override 
    protected void onPause() { 
     super.onPause(); 

     // Don't receive any more updates from sensor. 
     mSensorManager.unregisterListener(this); 
    } 

    // Get readings from accelerometer and magnetometer. To simplify calculations, 
    // consider storing these readings as unit vectors. 

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     float axisX = event.values[0]; 
     float axisY = event.values[1]; 
     float axisZ = event.values[2]; 

     ActionBar actionBar = getActionBar();              //Get the ActionBar 

     // if (snloop == 0) { 
     if (axisZ > lastZ + 500 || axisZ < lastZ - 500) { 
      actionBar.setTitle("greater than 500");            //Set the title on the ActionBar 
      actionBar.setDisplayHomeAsUpEnabled(true);             //Make home icon clickable with < symbol on the left to go back 
      setProgressBarIndeterminate(true);               //Make the progress bar indeterminate 
      setProgressBarIndeterminateVisibility(true);            //Make the progress bar visible 
      snloop = 1; 
      lastZ = axisZ; 
      startscan =1; 
      onPause(); 
      else { 
      actionBar.setTitle("Please Place on Interchange Point");            //Set the title on the ActionBar 
      actionBar.setDisplayHomeAsUpEnabled(true);             //Make home icon clickable with < symbol on the left to go back 
      setProgressBarIndeterminate(true);               //Make the progress bar indeterminate 
      setProgressBarIndeterminateVisibility(true);            //Make the progress bar visible 
      snloop = 0; 
      lastZ = axisZ; 
     } 
+0

「startActivityが呼び出されたのと同じ時点で続行するだけです」というメッセージと同じです。もしあなたがalをコードしていれば、ステートメントstartActivity()の後ろにはコードはありません。あなたの活動がバックグラウンドになると、その活動はおそらく殺されるでしょう。これは活動の通常のライフサイクルプロセスです。 onSaveInstanceStateをオーバーライドして、アクティビティのインスタンス変数を保存する必要があります。その後、たとえばonCreate()でそれらを取得します。 – greenapps

答えて

0

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == request_Code) { 
     if (resultCode == RESULT_OK) { 
      String returnedResult = data.getData().toString(); 
     } 
    } 
} 
+0

ありがとう、私は返信する直接的な方法はないと思いますが、結果の後にすべてのコードをonActivityResultメソッドに移動するか、onActivityResultメソッドから呼び出す必要があります。これを解決する他の方法はありません。 – Chrish

+0

はい、あなたは正しいです – John

0

私はあなたのためにここに正確なコードをできない記述していますので、今はアンドロイドスタジオから離れているのです。流れを説明する。

startActivityForResultを呼び出しているアクティビティのonActivityResultメソッドをオーバーライドします。

これは、requestCode,resultCode、およびインテント(データありまたはなし)を提供します。 requestCodeは、startActivityForResult

関連する問題