Android 播放视频的意图总是播放同一个视频

Android 播放视频的意图总是播放同一个视频,android,Android,我正在创建播放SD卡中存储的视频的意图。碰巧我打了第一个,一切都好。但当我演奏另一首曲子时,每次我演奏第一首曲子时,它都会演奏。这是我的密码: package com.remote; import java.io.File; import java.io.IOException; import com.remote.R.drawable; import android.app.Activity; import android.content.Intent; import andr

我正在创建播放SD卡中存储的视频的意图。碰巧我打了第一个,一切都好。但当我演奏另一首曲子时,每次我演奏第一首曲子时,它都会演奏。这是我的密码:

    package com.remote;

import java.io.File;
import java.io.IOException;

import com.remote.R.drawable;


import android.app.Activity;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.MediaController;
import android.widget.VideoView;


    public class MyVideos extends Activity{

private String path="/sdcard/Movies/Telmex";



@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.myvideos);

    createLinks(new File(path));

}

public void createLinks(File path) 
{ 
    LinearLayout layout = (LinearLayout) findViewById(R.id.myvideoslayout);
    if( path.exists() ) {
        File[] files = path.listFiles();
        for(int i=0; i<files.length; i++) 
        {
          if(files[i].getName().toString().charAt(0)!='.')
          {
           String videoName;
           Button video=new Button(this);
           video.setBackgroundColor(2);
           video.setTextSize(23);
           video.setCompoundDrawablesWithIntrinsicBounds(0,0,drawable.videoicon,0);
           videoName=new String(files[i].getName());
           video.setText(videoName);
           createListener(video,videoName);
           LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(
                   LinearLayout.LayoutParams.MATCH_PARENT,
                   LinearLayout.LayoutParams.WRAP_CONTENT
           );   
           layout.addView(video,p); 
          }

        }
    }
}

public void createListener(Button video, final String name)
{
    video.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            videoPlayer(path,name,true);
        }
    }); 
}

public void videoPlayer(String path, String fileName, boolean autoplay)
{
    Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
    Uri data = Uri.parse(path+"/"+fileName);
    intent.setDataAndType(data, "video/mp4");
    startActivity(intent);



 }

  }
package.com.remote;
导入java.io.File;
导入java.io.IOException;
导入com.remote.R.drawable;
导入android.app.Activity;
导入android.content.Intent;
导入android.graphics.PixelFormat;
导入android.media.MediaPlayer;
导入android.net.Uri;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.LinearLayout;
导入android.widget.MediaController;
导入android.widget.VideoView;
公共类MyVideos扩展活动{
私有字符串路径=“/sdcard/Movies/Telmex”;
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.myvideos);
创建链接(新文件(路径));
}
public void createLinks(文件路径)
{ 
LinearLayout布局=(LinearLayout)findViewById(R.id.myvideoslayout);
if(path.exists()){
File[]files=path.listFiles();

对于(int i=0;i重写

我做了一些挖掘,并写了下面的代码,如果这有相同的问题,那么这是你的外部视频播放器,而不是你的应用程序

public class ExampleActivity extends Activity {
    // Change this path
    private final String path = Environment.getExternalStorageDirectory() + "/android/data/com.example/files/";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        File dir = new File(path);
        List<String> files = new ArrayList<String>();
        Collections.addAll(files, dir.list());
        Collections.sort(files);

        while(files.get(0).startsWith("."))
            files.remove(0);

        ListView listView = (ListView) findViewById(R.id.list);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, files);
        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String uri = path + ((TextView) view).getText().toString();
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setDataAndType(Uri.parse(uri), "video/*");
                startActivity(intent);
            }
        });
    }
}
公共类ExampleActivity扩展活动{
//改变这条路
私有最终字符串路径=Environment.getExternalStorageDirectory()+“/android/data/com.example/files/”;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
文件目录=新文件(路径);
列表文件=新的ArrayList();
Collections.addAll(文件,dir.list());
收集.分类(文件);
while(files.get(0).startsWith(“.”)
删除(0);
ListView ListView=(ListView)findViewById(R.id.list);
ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,文件);
setAdapter(适配器);
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
字符串uri=path+((TextView)视图).getText().toString();
意向意向=新意向(意向.行动\视图);
intent.setDataAndType(Uri.parse(Uri),“video/*”;
星触觉(意向);
}
});
}
}
添加


我很高兴内部视频播放器可以正常工作。它之所以会重置,是因为每次你改变方向时,操作系统都会从头开始破坏和重建你的应用程序……就像你按“后退”按钮退出应用程序,然后再次运行一样。如果你从下面使用教程,你需要将视频的位置保存在
onDestro中y()
到类变量,并在
onCreate()中
检查该变量是否有有效的位置,或者只是在视频的开头开始。

您的按钮是否有不同的文本?当我返回并选择不同的文本时,播放机会将上一个视频恢复到原来的位置。但是,即使我让它完成并选择了一个新的视频。无论发生什么,它都会再次播放相同的视频。啊,我明白了。你验证过不同的文件名传递给intent吗?是的,它始终是相应的文件名。发生的情况是视频播放器不播放新的文件,而是继续播放旧的文件。运气好吗?除非你的应用程序正在播放视频,否则你不需要添加任何intent筛选器。如果你不想,这里有一个示例帽子路线。解决了!我所做的是使用您告诉我的示例:我必须使用双活动方式,以便在列表中以纵向模式工作,在播放器中以横向模式工作。非常感谢!