How to pass Intent Extras?

2019-01-29 07:12发布

问题:

     public class Menus extends Activity {
//set constants for MediaStore to query, and show videos
private final static Uri MEDIA_EXTERNAL_CONTENT_URI = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
private final static String _ID = MediaStore.Video.Media._ID;
private final static String MEDIA_DATA = MediaStore.Video.Media.DATA;
//flag for which one is used for images selection
private GridView _gallery; 
private Cursor _cursor;
private int _columnIndex;
private int[] _videosId;
private Uri _contentUri;


protected Context _context;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    _context = getApplicationContext();
    _gallery = (GridView) findViewById(R.id.videoGrdVw);
    //set default as external/sdcard uri
    _contentUri = MEDIA_EXTERNAL_CONTENT_URI;
    //initialize the videos uri 
    //showToast(_contentUri.getPath());
    initVideosId();
    //set gallery adapter
    setGalleryAdapter();
}
private void setGalleryAdapter() {
    _gallery.setAdapter(new VideoGalleryAdapter(_context));
    _gallery.setOnItemClickListener(_itemClickLis);

}
private AdapterView.OnItemClickListener _itemClickLis = new OnItemClickListener() 
{
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
    {
        // Now we want to actually get the data location of the file
        String [] proj={MEDIA_DATA};
        // We request our cursor again
        _cursor = managedQuery(_contentUri,
                proj, // Which columns to return
                null,       // WHERE clause; which rows to return (all rows)
                null,       // WHERE clause selection arguments (none)
                null); // Order-by clause (ascending by name)
        // We want to get the column index for the data uri
        int count = _cursor.getCount();
        //
        _cursor.moveToFirst();
        //
        _columnIndex = _cursor.getColumnIndex(MEDIA_DATA);
        // Lets move to the selected item in the cursor
        _cursor.moveToPosition(position);

        Intent i = new Intent();
        i.putExtra("mnt/sdcard-ext", _ID);
        startActivity("com.ave.EDITOR");


    }
};

The Above is part of my Second Activity. Basically This code Displays Video Thumbnails from the SD card of the phone. Anyways, When i click on a thumbnail i want the Item in the list clicked to open to a new activity posted below, which is a ViewView.

public class Editor extends Activity {

ImageButton video1;
int isClicked = 0;
ImageButton audio;
int isClicked1 = 0;
private String path = "mnt/sdcard-ext";
private VideoView mVideoView;

    @Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    getWindow().setFormat(PixelFormat.TRANSLUCENT);
    setContentView(R.layout.editor);
    mVideoView = (VideoView) findViewById(R.id.videoView);

    int data = getIntent().getExtras("mnt/sdcard-ext") .getInt("com.ave.EDITOR");

    if (path == "mnt/sdcard-ext") {
        // Tell the user to provide a media file URL/path.
        Toast.makeText(
                Editor.this,
                "Please edit VideoViewDemo Activity, and set path"
                        + " variable to your media file URL/path",
                Toast.LENGTH_LONG).show();

    } else {

        /*
         * Alternatively,for streaming media you can use
         * mVideoView.setVideoURI(Uri.parse(URLstring));
         */
        mVideoView.setVideoPath(path);
        mVideoView.setMediaController(new MediaController(this));
        mVideoView.requestFocus();



    video1 = (ImageButton) findViewById(R.id.video1);
    video1.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            if (isClicked == 0) {
                video1.setImageResource(R.drawable.video_pressed);
                isClicked = 1;
            } else {
                video1.setImageResource(R.drawable.video1);
                isClicked = 0;
            }
          }
     });

    audio = (ImageButton) findViewById(R.id.audio);
    audio.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            if (isClicked1 == 0) {
                audio.setImageResource(R.drawable.audio_pressed);
                isClicked1 = 1;
            } else {
                audio.setImageResource(R.drawable.audio);
                isClicked1 = 0;
            }
          }
      });
    }
  }
}

As you can see I don't know how to properly pass the intent extras, nor do i know how to get them from the 3rd activity. All help is appreciated. Thank you.

====== Android Manifest ====== (This is not the full manifest file)

<activity android:name=".Menus" android:label="@string/app_name" android:screenOrientation="landscape" >
      <intent-filter>
            <action android:name="com.ave.CLEARSCREEN" />
            <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
</activity>
<activity android:name=".Editor" android:screenOrientation="landscape" >
      <intent-filter>
            <action android:name="com.ave.EDITOR" />
            <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
</activity>
</application>
</manifest>

回答1:

Intent i = new Intent("com.ave.EDITOR");
i.putExtra("mnt/sdcard-ext", _ID);
startActivity(i);

and in second activity in onCreate method:

String data = getIntent().getStringExtra("mnt/sdcard-ext");


回答2:

Try this: int data = getIntent().getExtras() .getInt("mnt/sdcard-ext");



回答3:

You need to call putExtra() on the Intent instance you are passing to startActivity(). In the second activity, you can call getIntent() (a member of Activity) to get the Intent that started the Activity. Do it in onCreate(). Then, it will return you an Intent instance, which you can call get<type>Extra() on depending on what type of extra you packed in there. If your requirements are beyond the basic types supported (things that already implement Parcelable, and the fundamental java types) then you will need to write your own class and implement the Parcelable interface.

See the Intent doc for more info.