ȸ¿ø°¡ÀԡžÆÀ̵ð/ºñ¹øã±â
ȨÀ¸·Î


[android] ¹Ìµð¾î Ç÷¹À̾î·Î ¿Àµð¿À ºñµð¿À Àç»ýÇϱâ
8³â Àü
ÀÌ »ùÇüҽº´Â ¾Èµå·ÎÀÌµå ¼³Ä¡Æú´õ¿¡ android-sdk-windows/samples/android-8/ApiDemos À§Ä¡¿¡ ¿øº»¼Ò½º°¡ ÀÖ½À´Ï´Ù.

¹Ìµð¾î Ç÷¹ÀÌ¾î °´Ã¼¸¦ »ý¼ºÇÏ¿© ·ÎÄà / ¸®¼Ò½º ¿Àµð¿À ºñµð¿À ÆÄÀÏÀ» Àоîµé¿©¼­ Àç»ý󸮸¦ ÇÕ´Ï´Ù.

¸ÕÀú ¿øÇϽô ÆÐÅ°Áö °æ·Î¿¡ MediaPlayerDemo.java ¾×ƼºñƼ Ŭ·¡½º ÆÄÀÏÀ» Ãß°¡ÇÕ´Ï´Ù.

/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package net.korsoft.Test012;

import net.korsoft.Test012.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

/*
* µ¿¿µ»ó ÆÄÀÏ(ºñµð¿À)°ú À½¾ÇÆÄÀÏ(¿Àµð¿À)À» Àç»ýÇÏ´Â ¹Ìµð¾î Ç÷¹À̾ Á¦¾î¸¦ ÇÕ´Ï´Ù.
* /res/raw/test_cbr.mp3 À½¾ÇÆÄÀÏÀ» Àç»óÇÏ°í ÀÖ½À´Ï´Ù.
* /res/layout/mediaplayer_1.xml ·¹À̾ƿô ÆÄÀÏÀ» ¾×ƼºñƼÀÇ ·¹À̾ƿôÀ¸·Î Àû¿ëÇÕ´Ï´Ù.
* ³×°³ÀÇ ¹öÆ°À¸·Î À½¾Ç°ú ºñµð¿À ÆÄÀϵéÀ» ¸®¼Ò½º¿Í ·ÎÄÃÆÄÀÏ¿¡¼­ °¢°¢ Àоî¿Àµµ·Ï ó¸®ÇÏ°í ÀÖ½À´Ï´Ù.
*/
public class MediaPlayerDemo extends Activity {
    private Button mlocalvideo;
    private Button mresourcesvideo;
    private Button mstreamvideo;
    private Button mlocalaudio;
    private Button mresourcesaudio;
    private Button mstreamaudio;
    private static final String MEDIA = "media";
    private static final int LOCAL_AUDIO = 1;
    private static final int STREAM_AUDIO = 2;
    private static final int RESOURCES_AUDIO = 3;
    private static final int LOCAL_VIDEO = 4;
    private static final int STREAM_VIDEO = 5;
    private static final int RESOURCES_VIDEO = 6;

    @Override
    protected void onCreate(Bundle icicle) {
        // TODO Auto-generated method stub
        super.onCreate(icicle);
        setContentView(R.layout.mediaplayer_1);
        mlocalaudio = (Button) findViewById(R.id.localaudio);
        mlocalaudio.setOnClickListener(mLocalAudioListener);
        mresourcesaudio = (Button) findViewById(R.id.resourcesaudio);
        mresourcesaudio.setOnClickListener(mResourcesAudioListener);

        mlocalvideo = (Button) findViewById(R.id.localvideo);
        mlocalvideo.setOnClickListener(mLocalVideoListener);
        mstreamvideo = (Button) findViewById(R.id.streamvideo);
        mstreamvideo.setOnClickListener(mStreamVideoListener);
    }

    /*
     * ·ÎÄÿÀµð¿ÀÆÄÀÏÀ» ½ÇÇàÇÏ´Â ¹Ìµð¾îÇ÷¹À̾ ½ÃÀÛÇÏ´Â ¾×ƼºñƼ¸¦ ¶ç¿ó´Ï´Ù.
     */
    private OnClickListener mLocalAudioListener = new OnClickListener() {
        public void onClick(View v) {
            Intent intent =
                    new Intent(MediaPlayerDemo.this.getApplication(),
                            MediaPlayerDemo_Audio.class);
            intent.putExtra(MEDIA, LOCAL_AUDIO);
            startActivity(intent);

        }
    };
    /*
     * ¸®¼Ò½º¿Àµð¿ÀÆÄÀÏÀ» ½ÇÇàÇÏ´Â ¹Ìµð¾îÇ÷¹À̾ ½ÃÀÛÇÏ´Â ¾×ƼºñƼ¸¦ ¶ç¿ó´Ï´Ù.
     */
    private OnClickListener mResourcesAudioListener = new OnClickListener() {
        public void onClick(View v) {
            Intent intent =
                    new Intent(MediaPlayerDemo.this.getApplication(),
                            MediaPlayerDemo_Audio.class);
            intent.putExtra(MEDIA, RESOURCES_AUDIO);
            startActivity(intent);

        }
    };

    /*
     * ·ÎÄúñµð¿ÀÆÄÀÏÀ» ½ÇÇàÇÏ´Â ¹Ìµð¾îÇ÷¹À̾ ½ÃÀÛÇÏ´Â ¾×ƼºñƼ¸¦ ¶ç¿ó´Ï´Ù.
     */
    private OnClickListener mLocalVideoListener = new OnClickListener() {
        public void onClick(View v) {
            Intent intent =
                    new Intent(MediaPlayerDemo.this,
                            MediaPlayerDemo_Video.class);
            intent.putExtra(MEDIA, LOCAL_VIDEO);
            startActivity(intent);

        }
    };
    /*
     * ½ºÆ®¸®¹Öºñµð¿ÀÆÄÀÏÀ» ½ÇÇàÇÏ´Â ¹Ìµð¾îÇ÷¹À̾ ½ÃÀÛÇÏ´Â ¾×ƼºñƼ¸¦ ¶ç¿ó´Ï´Ù.
     */
    private OnClickListener mStreamVideoListener = new OnClickListener() {
        public void onClick(View v) {
            Intent intent =
                    new Intent(MediaPlayerDemo.this,
                            MediaPlayerDemo_Video.class);
            intent.putExtra(MEDIA, STREAM_VIDEO);
            startActivity(intent);

        }
    };



}

¿Àµð¿À ÆÄÀÏÀ» Àç»ýÇÏ´Â ¾×ƼºñƼ ÆÄÀÏÀÎ MediaPlayerDemo_Audio.java ¸¦ ¿øÇϽô ÆÐÅ°Áö °æ·Î¿¡ Ãß°¡ÇÕ´Ï´Ù.

/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package net.korsoft.Test012;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

import net.korsoft.Test012.R;

public class MediaPlayerDemo_Audio extends Activity {

    private static final String TAG = "MediaPlayerDemo";
    private MediaPlayer mMediaPlayer;
    private static final String MEDIA = "media";
    private static final int LOCAL_AUDIO = 1;
    private static final int STREAM_AUDIO = 2;
    private static final int RESOURCES_AUDIO = 3;
    private static final int LOCAL_VIDEO = 4;
    private static final int STREAM_VIDEO = 5;
    private String path;

    private TextView tx;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        tx = new TextView(this);
        setContentView(tx);
        Bundle extras = getIntent().getExtras();
        //¾×ƼºñƼ¿¡¼­ ·ÎÄùöÆ°ÀÎÁö ¸®¼Ò½º¹öÆ°ÀÎÁö¿¡ µû¶ó¼­ ¾×źñƼÀÇ Ãß°¡µ¥ÀÌÅÍ ¼³Á¤ÇÑ °ªÀ» °¡Á®¿Í¼­ ÇØ´ç 󸮸¦ ÇÕ´Ï´Ù.
        playAudio(extras.getInt(MEDIA));
    }

    private void playAudio(Integer media) {
        try {
            switch (media) {
                case LOCAL_AUDIO:
                    /**
                     * TODO: Set the path variable to a local audio file path.
                     */
                    path = "";
                    if (path == "") {
                        // Tell the user to provide an audio file URL.
                        Toast
                                .makeText(
                                        MediaPlayerDemo_Audio.this,
                                        "Please edit MediaPlayer_Audio Activity, "
                                                + "and set the path variable to your audio file path."
                                                + " Your audio file must be stored on sdcard.",
                                        Toast.LENGTH_LONG).show();

                    }
                    //¹Ìµð¾î Ç÷¹ÀÌ¾î °´Ã¼»ý¼º
                    mMediaPlayer = new MediaPlayer();
                    //¿Àµð¿ÀÆÄÀÏ°æ·Î ¼³Á¤
                    mMediaPlayer.setDataSource(path);
                    mMediaPlayer.prepare();
                    mMediaPlayer.start();
                    break;
                case RESOURCES_AUDIO:
                    /**
                     * TODO: Upload a audio file to res/raw folder and provide
                     * its resid in MediaPlayer.create() method.
                     */
                 //¿Àµð¿À ¸®¼Ò½ºÆÄÀÏ¿¡¼­ ¹Ìµð¿ÀÇ÷¹À̾ »ý¼ºÇÏ¿©, Àç»ý½ÃÀÛó¸®
                    mMediaPlayer = MediaPlayer.create(this, R.raw.test_cbr);
                    mMediaPlayer.start();

            }
            tx.setText("Playing audio...");

        } catch (Exception e) {
            Log.e(TAG, "error: " + e.getMessage(), e);
        }

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // TODO Auto-generated method stub
        if (mMediaPlayer != null) {
         //¹Ìµð¾î Ç÷¹À̾î ÇØÁ¦..
            mMediaPlayer.release();
            mMediaPlayer = null;
        }

    }
}

ºñµð¿À ÆÄÀÏÀ» Àç»ýÇÏ´Â MediaPlayerDemo_Video.java ÆÄÀÏÀ» ¿øÇϽô °æ·Î¿¡ Ãß°¡ÇØÁÝ´Ï´Ù.

/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package net.korsoft.Test012;

import net.korsoft.Test012.R;

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.media.MediaPlayer.OnVideoSizeChangedListener;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Toast;

/*
* ºñµð¿À ÆÄÀÏÀ» Àç»ýÇϴ Ŭ·¡½º ÀÔ´Ï´Ù.
* °¢Á¾ ¹Ìµð¾î Ç÷¹ÀÌ¾î °ü·ÃµÈ ÀÎÅÍÆäÀ̽ºµéÀ» ±¸ÇöÇÏ¿©,
* °¢ ÀÎÅÍÆäÀ̽ºµéÀÇ ¸Þ¼ÒµåµéÀ» ±¸ÇöÇϸ鼭, ¹Ìµð¾î Ç÷¹À̾ Á¦¾îÇÏ°í ÀÖ½À´Ï´Ù.
*/
public class MediaPlayerDemo_Video extends Activity implements
        OnBufferingUpdateListener, OnCompletionListener,
        OnPreparedListener, OnVideoSizeChangedListener, SurfaceHolder.Callback {

    private static final String TAG = "MediaPlayerDemo";
    private int mVideoWidth;
    private int mVideoHeight;
    private MediaPlayer mMediaPlayer;
    private SurfaceView mPreview;
    private SurfaceHolder holder;
    private String path;
    private Bundle extras;
    private static final String MEDIA = "media";
    private static final int LOCAL_AUDIO = 1;
    private static final int STREAM_AUDIO = 2;
    private static final int RESOURCES_AUDIO = 3;
    private static final int LOCAL_VIDEO = 4;
    private static final int STREAM_VIDEO = 5;
    private boolean mIsVideoSizeKnown = false;
    private boolean mIsVideoReadyToBePlayed = false;

    /**
     *
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.mediaplayer_2);
        mPreview = (SurfaceView) findViewById(R.id.surface);
        holder = mPreview.getHolder();
        holder.addCallback(this);
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        extras = getIntent().getExtras();

    }

    private void playVideo(Integer Media) {
        doCleanUp();
        try {

            switch (Media) {
                case LOCAL_VIDEO:
                    /*
                     * TODO: Set the path variable to a local media file path.
                     */
                    path = "";
                    if (path == "") {
                        // Tell the user to provide a media file URL.
                        Toast
                                .makeText(
                                        MediaPlayerDemo_Video.this,
                                        "Please edit MediaPlayerDemo_Video Activity, "
                                                + "and set the path variable to your media file path."
                                                + " Your media file must be stored on sdcard.",
                                        Toast.LENGTH_LONG).show();

                    }
                    break;
                case STREAM_VIDEO:
                    /*
                     * TODO: Set path variable to progressive streamable mp4 or
                     * 3gpp format URL. Http protocol should be used.
                     * Mediaplayer can only play "progressive streamable
                     * contents" which basically means: 1. the movie atom has to
                     * precede all the media data atoms. 2. The clip has to be
                     * reasonably interleaved.
                     *
                     */
                    path = "";
                    if (path == "") {
                        // Tell the user to provide a media file URL.
                        Toast
                                .makeText(
                                        MediaPlayerDemo_Video.this,
                                        "Please edit MediaPlayerDemo_Video Activity,"
                                                + " and set the path variable to your media file URL.",
                                        Toast.LENGTH_LONG).show();

                    }

                    break;


            }

            // Create a new media player and set the listeners
            mMediaPlayer = new MediaPlayer();
            mMediaPlayer.setDataSource(path);
            mMediaPlayer.setDisplay(holder);
            mMediaPlayer.prepare();
            mMediaPlayer.setOnBufferingUpdateListener(this);
            mMediaPlayer.setOnCompletionListener(this);
            mMediaPlayer.setOnPreparedListener(this);
            mMediaPlayer.setOnVideoSizeChangedListener(this);
            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);


        } catch (Exception e) {
            Log.e(TAG, "error: " + e.getMessage(), e);
        }
    }

    public void onBufferingUpdate(MediaPlayer arg0, int percent) {
        Log.d(TAG, "onBufferingUpdate percent:" + percent);

    }

    public void onCompletion(MediaPlayer arg0) {
        Log.d(TAG, "onCompletion called");
    }

    public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
        Log.v(TAG, "onVideoSizeChanged called");
        if (width == 0 || height == 0) {
            Log.e(TAG, "invalid video width(" + width + ") or height(" + height + ")");
            return;
        }
        mIsVideoSizeKnown = true;
        mVideoWidth = width;
        mVideoHeight = height;
        if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
            startVideoPlayback();
        }
    }

    public void onPrepared(MediaPlayer mediaplayer) {
        Log.d(TAG, "onPrepared called");
        mIsVideoReadyToBePlayed = true;
        if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
            startVideoPlayback();
        }
    }

    public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) {
        Log.d(TAG, "surfaceChanged called");

    }

    public void surfaceDestroyed(SurfaceHolder surfaceholder) {
        Log.d(TAG, "surfaceDestroyed called");
    }


    public void surfaceCreated(SurfaceHolder holder) {
        Log.d(TAG, "surfaceCreated called");
        playVideo(extras.getInt(MEDIA));


    }

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

    @Override
    protected void onDestroy() {
        super.onDestroy();
        releaseMediaPlayer();
        doCleanUp();
    }

    private void releaseMediaPlayer() {
        if (mMediaPlayer != null) {
            mMediaPlayer.release();
            mMediaPlayer = null;
        }
    }

    private void doCleanUp() {
        mVideoWidth = 0;
        mVideoHeight = 0;
        mIsVideoReadyToBePlayed = false;
        mIsVideoSizeKnown = false;
    }

    private void startVideoPlayback() {
        Log.v(TAG, "startVideoPlayback");
        holder.setFixedSize(mVideoWidth, mVideoHeight);
        mMediaPlayer.start();
    }
}

À§ÀÇ ¾×ƼºñƼ¿¡ Àû¿ëÇÒ ·¹À̾ƿô ÆÄÀÏÀ» /res/layout/mediaplayer_1.xml ÆÄÀÏÀ» Ãß°¡ÇÕ´Ï´Ù.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <Button android:id="@+id/localvideo"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="@string/local_video"
    />
    
    <Button android:id="@+id/streamvideo"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="@string/stream_video"
    />
    
    <Button android:id="@+id/localaudio"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="@string/local_audio"
    />
    
    <Button android:id="@+id/resourcesaudio"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="@string/res_audio"
    />
    
</LinearLayout>


À§ÀÇ ¾×ƼºñƼ¿¡ Àû¿ëÇÒ ·¹À̾ƿô ÆÄÀÏÀ» /res/layout/mediaplayer_2.xml ÆÄÀÏÀ» Ãß°¡ÇÕ´Ï´Ù.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <SurfaceView android:id="@+id/surface"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center">
    </SurfaceView>
  
</LinearLayout>


¾Èµå·ÎÀ̵å sdk ¼³Ä¡Æú´õ¿¡¼­, »ùÇÃÆú´õ¿¡¼­ /res/raw/test_cbr.mp3 ÆÄÀÏÀ» ÇöÀç ÇÁ·ÎÁ§Æ® Æú´õ·Î º¹»çÇØ¿É´Ï´Ù.

AndroidManifest.xml ÆÄÀÏÀ» ¼³Á¤ÇÕ´Ï´Ù.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="net.korsoft.Test012"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">

        <activity android:name=".MediaPlayerDemo" android:label="Media/MediaPlayer">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".MediaPlayerDemo_Audio" android:label="Media/MediaPlayer">
            <intent-filter>
                <category android:name="android.intent.category.SAMPLE_CODE" />
            </intent-filter>
        </activity>

        <activity android:name=".MediaPlayerDemo_Video" android:label="Media/MediaPlayer">
            <intent-filter>
                <category android:name="android.intent.category.SAMPLE_CODE" />
            </intent-filter>
        </activity>

    </application>
</manifest>
ÃßõÃßõ : 268 Ãßõ ¸ñ·Ï
¹øÈ£ Á¦¸ñ
1,076
Jscript 5.8 ¿ë º¸¾È ¾÷µ¥ÀÌÆ®(KB971961) ´Ù¿î·Îµå ¸µÅ© ÀÔ´Ï´Ù
1,075
Internet Explorer Ãß°¡ ±â´É ¹®Á¦ ÇØ°á
1,074
Internet Explorer ±âº» ¼³Á¤À» º¹±¸ (°³ÀÎ ¼³Á¤ »èÁ¦ ¿É¼ÇÀ» »ç¿ë)
1,073
½ºÅ¸ÀϽÃÆ®(css)¿¡¼­ A:link, A:visited, A:active, A:hover ¼³¸í
1,072
META TagÀÇ Á¾·ù¿Í »ç¿ë¹æ¹ý
1,071
ȨÆäÀÌÁö ·Îº¿ ¼³Á¤ ¹æ¹ý
1,070
·¹ÀÌ¾î »ó´Ü ¹«Á¶°Ç°íÁ¤
1,069
[jquery] alert¹Ú½º ¸»°í ·¹ÀÌ¾î ¹Ú½º¸¦ ¶ç¿öº¸¼¼¿ä
1,068
À©µµ¿ì ¾ÏÈ£ ºÐ½ÇÇßÀ»¶§ ..
1,067
[Windows] ÀÛ¾÷°ü¸®ÀÚ ½ÇÇà ÆÄÀÏ ÃÑÁ¤¸®
1,066
Áö±Ý À©µµ¿ì 7 â ¸ð¾çÀÌ À©µµ¿ì °íÀüÀ¸·Î ³ª¿Ã¶§..
1,065
°£´ÜÇÑ ¸í·É¾î·Î Á»ºñ PC È®ÀÎÇϱâ
1,064
Internet Explorer ȣȯ¼º ·»´õ¸µ ¸ðµå·Î º¸±â
1,063
div ·¹À̾ƿô Àâ±â!
1,062
Çϵåµð½ºÅ© ÆÄƼ¼Ç ¼û±â±â
1,061
¹ÙÀÌ¿À½º ºÎÆ® ÇÁ·Î¼¼½º
1,060
À©µµ¿ì XPÀÇ ºÎÆà °úÁ¤
1,059
ÇÁ·Î½ÃÀú ½ÃÀÛ ÁöÁ¡ _except_handler4_commonÀ»(¸¦) DLL msvcrt.dll¿¡¼­ ãÀ» ¼ö ¾ø½À´Ï´Ù
1,058
È°¼ºÆÄƼ¼ÇÀ» ºñÈ°¼ºÆÄƼ¼ÇÀ¸·Î º¯°æÇÏ´Â ¹æ¹ý
1,057
windows XP ÀÚµ¿½ÇÇà ²ô±â
1,056
À¯ÇØÇÑ »çÀÌÆ® ±¤°í¸Þ¼¼Áö°¡ ³ª¿ÀÁö ¾Ê°Ô Çϱâ
1,055
Á¦°¡ Âü°í·Î ÇÏ´Â ¹èÄ¡ÆÄÀÏ ÀÛ¼º¹ýµîÀÔ´Ï´Ù
1,054
À©µµ¿ì XP °øÀ¯Æú´õ ¾ÏÈ£°É±â
1,053
¹ÙÅÁÈ­¸éÀ» Dµå¶óÀ̺ê·Î!~!!!!!!
1,052
½Ã½ºÅÛÆÄÀÏ È®ÀåÀÚ!!
1,051
À¥Ç¥ÁØÀ» À§ÇÑ <iframe></iframe>
1,050
[CSS/À¥Ç¥ÁØ] DOCTYPE ¼±¾ð
1,049
CSS Àý´ë À§Ä¡¸¦ »ç¿ëÇÑ ÇÁ·¹ÀÓ È¿°ú
1,048
Recommended Doctype Declarations to use in your Web document
1,047
CSS ·¹À̾ƿô ÅÛÇø´ »çÀÌÆ®
¸ñ·Ï
¹ÂÁ÷Æ®·ÎÆ® ºÎ»ê±¤¿ª½Ã ºÎ»êÁø±¸ °¡¾ßµ¿ ¤Ó °³ÀÎÁ¤º¸Ãë±Þ¹æħ
Copyright ¨Ï musictrot All rights reserved.