Datenaustausch via Intent klappt nicht

  • 1 Antworten
  • Letztes Antwortdatum
A

AllenWalker

Neues Mitglied
0
Hallo,

bin neu hier hier im Forum und Programmieranfänger mit dem Android SDK.
Für ein Projekt im Studium möchte ich gerne eingegebene Werte für Parameter über ein Intent an die Startactivity geben für die Eingrenzung des HSV Farbraumes mittels OpenCV. Die Startactivity zeigt die RGB bzw. die HSV Kamera an. Ein weiterer Menüeintrag ruft die Activity auf um die Parameter einzugeben. Wenn ich die Parameter eingegeben habe und auf den Button "Übernehmen" klicke, bekomme ich via Toast den Default-Wert angezeigt.

MainActivity.java
Code:
package com.example.objekttracking;

import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;
import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SurfaceView;
import android.view.WindowManager;
import android.widget.Toast;

public class MainActivity extends Activity implements CvCameraViewListener2 {
	
	private static final String TAG = "Objekttracking::Activity";
	
	private CameraBridgeViewBase mOpenCvCameraView;
	private MenuItem mItemPreviewHSV, mItemPreviewRGBA, mItemParameter;
	
	private Mat mRGBMat;
	
    private static final int VIEW_MODE_RGBA = 0;
    private static final int VIEW_MODE_HSV = 1;
    
    private int mViewMode;
    
    private int h_min, h_max, s_min, s_max, v_min, v_max;

    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            switch (status) {
                case LoaderCallbackInterface.SUCCESS:
                {
                    Log.i(TAG, "OpenCV loaded successfully");
                    mOpenCvCameraView.enableView();
                } break;
                default:
                {
                    super.onManagerConnected(status);
                } break;
            }
        }
    };
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, "called onCreate");
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        setContentView(R.layout.activity_main);

        mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.activity_main_java_surface_view);

        mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);

        mOpenCvCameraView.setCvCameraViewListener(this);
        
//		h_min = 0;
//		h_max = 0;
//		s_min = 0;
//		s_max = 0;
//		v_min = 0;
//		v_max = 0;
	}
	
    @Override
    public void onPause()
    {
        super.onPause();
        if (mOpenCvCameraView != null)
            mOpenCvCameraView.disableView();
    }

    @Override
    public void onResume()
    {
        super.onResume();
        
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
        
		Intent intent = getIntent();
		 
		h_min = intent.getIntExtra("h_min",0);
		h_max = intent.getIntExtra("h_max",0);
		s_min = intent.getIntExtra("s_min",0);
		s_max = intent.getIntExtra("s_max",0);
		v_min = intent.getIntExtra("v_min",0);
		v_max = intent.getIntExtra("v_max",0);
		
		String toastMesage = "H_Min: " + h_min + " H_Max: " + h_max + "\n";
		toastMesage = toastMesage + "S_Min: " + s_min + " S_Max: " + s_max + "\n";
		toastMesage = toastMesage + "V_Min: " + v_min + " V_Max: " + v_max;
		
        Toast toast = Toast.makeText(this, toastMesage, Toast.LENGTH_LONG);
        toast.show();
    }

    public void onDestroy() {
        super.onDestroy();
        if (mOpenCvCameraView != null)
            mOpenCvCameraView.disableView();
    }

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
        Log.i(TAG, "called onCreateOptionsMenu");
        mItemPreviewRGBA = menu.add("Preview RGBA");
        mItemPreviewHSV = menu.add("Preview HSV");
        mItemParameter = menu.add("HSV Parameter");
        return true;
	}
	
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        String toastMesage = new String();
        Log.i(TAG, "called onOptionsItemSelected; selected item: " + item);

        if (item == mItemPreviewRGBA) {
            mViewMode = VIEW_MODE_RGBA;
            toastMesage = "RGB";
        } 
        else if (item == mItemPreviewHSV) {
            mViewMode = VIEW_MODE_HSV;
            toastMesage = "HSV";
        }
        else if (item == mItemParameter) {
    	    Intent intent = new Intent(this, ParameterActivity.class);
    	    startActivity(intent);
    	    toastMesage = "HSV Parameter";
        }
        
        Toast toast = Toast.makeText(this, toastMesage, Toast.LENGTH_LONG);
        toast.show();

        return true;
    }

	@Override
	public void onCameraViewStarted(int width, int height) {
		mRGBMat = new Mat(height, width, CvType.CV_8UC4);
		
	}

	@Override
	public void onCameraViewStopped() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
		final int viewMode = mViewMode;
		
		switch (viewMode) {	
          case VIEW_MODE_HSV: Imgproc.cvtColor(inputFrame.rgba(), mRGBMat, Imgproc.COLOR_RGB2HSV, 4); break;
          case VIEW_MODE_RGBA: mRGBMat = inputFrame.rgba(); break;
        }
		
		return mRGBMat;
	}

}

activity_main.xml
Code:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:opencv="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <org.opencv.android.JavaCameraView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:visibility="gone"
        android:id="@+id/activity_main_java_surface_view"
        opencv:show_fps="true"
        opencv:camera_id="any" />

</LinearLayout>

ParameterActivity.java
Code:
package com.example.objekttracking;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;

public class ParameterActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_parameter);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.parameter, menu);
		return true;
	}
	
	public void sendMessage(View view) {
	    Intent intent = new Intent(this, MainActivity.class);
	    
	    EditText h_min_wert = (EditText) findViewById(R.id.h_min_wert);
	    EditText h_max_wert = (EditText) findViewById(R.id.h_max_wert);
	    EditText s_min_wert = (EditText) findViewById(R.id.s_min_wert);
	    EditText s_max_wert = (EditText) findViewById(R.id.s_max_wert);
	    EditText v_min_wert = (EditText) findViewById(R.id.v_min_wert);
	    EditText v_max_wert = (EditText) findViewById(R.id.v_max_wert);
	    
	    String h_min = h_min_wert.getText().toString();
	    String h_max = h_max_wert.getText().toString();
	    String s_min = s_min_wert.getText().toString();
	    String s_max = s_max_wert.getText().toString();
	    String v_min = v_min_wert.getText().toString();
	    String v_max = v_max_wert.getText().toString();
	    
	    intent.putExtra("h_min", h_min);
	    intent.putExtra("h_max", h_max);
	    intent.putExtra("s_min", s_min);
	    intent.putExtra("s_max", s_max);
	    intent.putExtra("v_min", v_min);
	    intent.putExtra("v_max", v_max);
	    
	    startActivity(intent);
	}

}

activity_parameter.xml
Code:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="16dp"
    tools:context=".ParamaterActivity" >

    <TextView
        android:id="@+id/titel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="@string/hsv_paramter_einstellen"
        android:textStyle="bold"
        android:textSize="20sp" />
    
    <EditText
        android:id="@+id/h_min_wert"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:layout_below="@id/titel"
        android:hint="@string/h_min_wert" />
        
    <EditText
        android:id="@+id/h_max_wert"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:layout_below="@id/h_min_wert"
        android:hint="@string/h_max_wert" />
    
    <EditText
        android:id="@+id/s_min_wert"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:layout_below="@id/h_max_wert"
        android:hint="@string/s_min_wert" />
        
    <EditText
        android:id="@+id/s_max_wert"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:layout_below="@id/s_min_wert"
        android:hint="@string/h_max_wert" />
    
   <EditText
        android:id="@+id/v_min_wert"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:layout_below="@id/s_max_wert"
        android:hint="@string/v_min_wert" />
        
    <EditText
        android:id="@+id/v_max_wert"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:layout_below="@id/v_min_wert"
        android:hint="@string/v_max_wert" />
    
    <Button
        android:layout_width="135dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/v_max_wert"
        android:layout_centerHorizontal="true"
        android:text="@string/uebernehmen"
        android:onClick="sendMessage" />

</RelativeLayout>

Danke sehr,
Gruß,
AllenWalker
 
Doofer Anfängerfehler ^^
Schreibe einen String in den Intent und lese ihn als Integer aus. Das kann nicht klappen -_-
Zusätzlich habe ich noch die Methoden startActivityForResult und onActivityResult bei der Lösung des Problems verwendet.
 
Zurück
Oben Unten