如何传递Intent Extras?

时间:2011-07-20 19:49:42

标签: android android-intent extras

     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");


    }
};

以上是我的第二项活动的一部分。基本上此代码显示手机SD卡中的视频缩略图。无论如何,当我点击缩略图时,我希望列表中的项目被点击打开到下面发布的新活动,这是一个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;
            }
          }
      });
    }
  }
}

正如你所看到的,我不知道如何正确传递意图附加内容,也不知道如何从第3次活动中获取它们。所有帮助表示赞赏。谢谢。

====== Android Manifest ======(这不是完整的清单文件)

<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>

3 个答案:

答案 0 :(得分:1)

试试这个:int data = getIntent().getExtras() .getInt("mnt/sdcard-ext");

答案 1 :(得分:1)

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

onCreate方法中的第二项活动:

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

答案 2 :(得分:0)

您需要在传递给putExtra()的Intent实例上调用startActivity()。在第二个活动中,您可以调用getIntent()(Activity的成员)来获取启动Activity的Intent。在onCreate()中执行此操作。然后,它将返回一个Intent实例,您可以调用get<type>Extra(),具体取决于您在那里打包的额外类型。如果您的要求超出了支持的基本类型(已经实现了Parcelable的东西,以及基本的java类型),那么您将需要编写自己的类并实现Parcelable接口。

有关详情,请参阅Intent doc。