2

私は Android プログラミングが初めてで、学習の一環として、このオープン ソース プロジェクト (以下) を実行しようとしましたが、 import com.example.android.apis.R;. また、どこにでもありますR。私の知る限り、R.java自動的に生成され、作成または編集する必要はありません。このエラーの理由は何ですか。誰でもこれを説明できますか。このプロジェクトの実行には Eclipse を使用しました。

package com.example.android.apis.media;

import com.example.android.apis.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();
}
}

これは私が実行しようとしたコードです。

4

3 に答える 3

3

Project Property /* Android * で、プロジェクトのビルド ターゲットを Android 1.6 から Android 4.2 に変更することで、この問題を修正しました。

レイアウト xml ファイルの一部の新しい構文は古いバージョンではサポートされていませんが、これらのエラー情報はソース コードではなく出力ウィンドウに表示されます。

于 2012-11-24T07:40:27.747 に答える
0

これにはいくつかの原因が考えられます。

すべてのファイルに XML エラーがないことを確認してください。XML エラーがある場合、R. ファイルはビルドされません。エラーを修正すると、R. ファイルが自動的にビルドされます。そうでない場合は、プロジェクトのクリーニングを試してください。

また、次の行がないことを確認してください。

import android.R;

あなたのクラスで。

于 2011-08-18T20:14:43.620 に答える
0

これは、XML であるレイアウトまたはマニフェスト ファイルのエラーを意味します。

よくある間違いは、レイアウト設計の誤り、タグの欠落などであると思います

最初にそれらを修正し、プロジェクトを再度クリーンアップしてください

于 2012-08-25T04:12:09.637 に答える