简体   繁体   English

找不到可通过ACTION_VIEW Intent处理Intent的活动

[英]No Activity found to handle Intent With ACTION_VIEW Intent

i'm bulding a simple app for reproducing video. 我正在建立一个用于播放视频的简单应用。 I do this to lern about the textView. 我这样做是为了学习textView。 I have completed all but when i would reproduce a video the app crash. 我已经完成所有工作,但是当我要复制视频时,应用程序崩溃了。 I post all the code here. 我在这里发布所有代码。 This is the MainActivity and is the only activity of the app. 这是MainActivity,是应用程序的唯一活动。

package com.example.movieplayer;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.util.Log;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

public class MoviePlayerActivity extends Activity 
implements OnItemClickListener{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_movie_player);

    ArrayList<Movie> movieList = new ArrayList<Movie>();


    // elenco campi per la query sui media
    String[] mediaColumns = {
            MediaStore.Video.Media._ID, 
            MediaStore.Video.Media.TITLE,
            MediaStore.Video.Media.DURATION,
            MediaStore.Video.Media.DATA,
            MediaStore.Video.Media.MIME_TYPE
            };


    // elenco campi per la query sui thumbnail
    String[] thumbnailColumns = { MediaStore.Video.Thumbnails.DATA };

    // cursore sulle righe risultato

Cursor cursoreMedia = getContentResolver().
        query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                mediaColumns, null, null, null);

    // per ogni riga del risultto
    if ((cursoreMedia != null) && cursoreMedia.moveToFirst()) {
        do {
            int id = cursoreMedia.getInt(cursoreMedia
                    .getColumnIndex(MediaStore.Video.Media._ID));

            Cursor cursoreMiniature = getContentResolver().
                    query(MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI,
                            thumbnailColumns, MediaStore.Video.Thumbnails.VIDEO_ID
                            + "=" + id, null, null);

            // nuovo oggetto per l'arraylist

            Movie movie = new Movie(cursoreMedia, cursoreMiniature);
            movieList.add(movie);


        } while (cursoreMedia.moveToNext());

    }

    MovieListAdapter movieListAdapter = new MovieListAdapter(this, movieList);

    ListView movieListView = (ListView)findViewById(R.id.listView1);
    movieListView.setAdapter(movieListAdapter);

    movieListView.setOnItemClickListener(this);     

}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    // TODO Auto-generated method stub

    Movie movie = (Movie) parent.getAdapter().getItem(position);
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.parse(movie.getMovieFilePath()), 
                              movie.getMimeType());
    startActivity(intent);

}
}

This is the Movie class. 这是电影课。

package com.example.movieplayer;

import android.database.Cursor;
import android.provider.MediaStore;

class Movie {

private String titolo;
private String videoFilePath;
private String mimeType;
private long durata;
private String miniaturaFilePath;

public Movie(Cursor mediaCursor, Cursor thumbnailCursor) 

{
    titolo = mediaCursor.getString(mediaCursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE));
    videoFilePath = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Video.Media.DATA));
    mimeType = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Video.Media.MIME_TYPE));
    durata = mediaCursor.getLong(mediaCursor.getColumnIndex(MediaStore.Video.Media.DURATION));

    if ((thumbnailCursor != null) && thumbnailCursor.moveToFirst()) 
        miniaturaFilePath = thumbnailCursor.getString(thumbnailCursor.getColumnIndex(MediaStore.Video.Thumbnails.DATA));
    else
        miniaturaFilePath = null;
}

public String getTitolo() {
    return titolo;
}

public String getMovieFilePath() {
    return videoFilePath;
}

public String getMimeType() {
    return mimeType;
}

public long getDurata() {
    return durata;
}

public String getThumbnailFilePath() {
    return miniaturaFilePath;
}

public String toString() {
    return "Video [title=" + titolo + ", PathFileVideo=" + videoFilePath
            + ", mimeType=" + mimeType + ", durata=" + durata
            + ", thumbnailFilePath=" + miniaturaFilePath + "]";

}


}

This is the MovieListAdapter 这是MovieListAdapter

    package com.example.movieplayer;

import java.util.ArrayList;
import android.annotation.SuppressLint;
import android.content.Context;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.VideoView;


@SuppressLint({ "InflateParams", "DefaultLocale" })
class MovieListAdapter extends BaseAdapter {

    private Context context;
    ArrayList<Movie> videoList;

    public MovieListAdapter(Context context, ArrayList<Movie> movieList) {
    this.context = context;
    this.videoList = movieList; }





    @Override
    public int getCount() {
        return videoList.size();
    }

    @Override
    public Object getItem(int position) {
        return videoList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return  position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater layoutInflater =
                    (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = layoutInflater.inflate(R.layout.movie_item, null);


        }

        Movie movie = (Movie) getItem(position);

        // thumbnail
        ImageView thumbnail = 
                (ImageView) convertView.findViewById(R.id.thumbnail);

        if (movie.getThumbnailFilePath() != null) {
            thumbnail.setImageURI(Uri.parse(movie.getThumbnailFilePath()));
        } else {
            thumbnail.setImageResource(R.drawable.ic_launcher);
        }

        //titolo
        TextView titolo = (TextView) convertView.findViewById(R.id.titolo);
        titolo.setText(movie.getTitolo());

        //durata
        TextView durata = (TextView) convertView.findViewById(R.id.durata);
        durata.setText(getDurataAsString(movie.getDurata()));

        return convertView;
    }

    private static String getDurataAsString(long durata) {

        long secondi = durata / 1000;
        long millisecondi = durata % 1000;

        long minuti = secondi / 60;
        secondi %= 60;

        long ore = minuti / 60;
        minuti %= 60;

        String durataString = String.format("%1$02d:%2$02d:%3$02d.%4$03d",
                ore, minuti, secondi, millisecondi);

        return durataString;
    }

}

And this is the error that the LogCat give me when the app crash. 这是应用程序崩溃时LogCat给我的错误。

  09-08 00:04:42.681: E/AndroidRuntime(9468): FATAL EXCEPTION: main
09-08 00:04:42.681: E/AndroidRuntime(9468): Process: com.example.movieplayer, PID: 9468
09-08 00:04:42.681: E/AndroidRuntime(9468): android.content.ActivityNotFoundException: No Activity found to handle Intent   

                    { act=android.intent.action.VIEW                        

dat=/storage/sdcard0/dcim/Camera/VID_20150804_193111.mp4 typ=video/mp4 }
09-08 00:04:42.681: E/AndroidRuntime(9468):     at android.app.Instrumentation.checkStartActivityResult             

        (Instrumentation.java:1776)
09-08 00:04:42.681: E/AndroidRuntime(9468):     at android.app.Instrumentation.execStartActivity                

        (Instrumentation.java:1496)
09-08 00:04:42.681: E/AndroidRuntime(9468):     at android.app.Activity.startActivityForResult(Activity.java:3801)
09-08 00:04:42.681: E/AndroidRuntime(9468):     at android.app.Activity.startActivityForResult(Activity.java:3743)
09-08 00:04:42.681: E/AndroidRuntime(9468):     at android.app.Activity.startActivity(Activity.java:4072)
09-08 00:04:42.681: E/AndroidRuntime(9468):     at android.app.Activity.startActivity(Activity.java:4040)
09-08 00:04:42.681: E/AndroidRuntime(9468):     at com.example.movieplayer.MoviePlayerActivity.onItemClick          

            (MoviePlayerActivity.java:85)
09-08 00:04:42.681: E/AndroidRuntime(9468):     at android.widget.AdapterView.performItemClick(AdapterView.java:305)
09-08 00:04:42.681: E/AndroidRuntime(9468):     at android.widget.AbsListView.performItemClick(AbsListView.java:1185)
09-08 00:04:42.681: E/AndroidRuntime(9468):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:3222)
09-08 00:04:42.681: E/AndroidRuntime(9468):     at android.widget.AbsListView$3.run(AbsListView.java:4138)
09-08 00:04:42.681: E/AndroidRuntime(9468):     at android.os.Handler.handleCallback(Handler.java:815)
09-08 00:04:42.681: E/AndroidRuntime(9468):     at android.os.Handler.dispatchMessage(Handler.java:104)
09-08 00:04:42.681: E/AndroidRuntime(9468):     at android.os.Looper.loop(Looper.java:194)
09-08 00:04:42.681: E/AndroidRuntime(9468):     at android.app.ActivityThread.main(ActivityThread.java:5578)
09-08 00:04:42.681: E/AndroidRuntime(9468):     at java.lang.reflect.Method.invoke(Native Method)
09-08 00:04:42.681: E/AndroidRuntime(9468):     at java.lang.reflect.Method.invoke(Method.java:372)
09-08 00:04:42.681: E/AndroidRuntime(9468):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run           

            (ZygoteInit.java:955)
09-08 00:04:42.681: E/AndroidRuntime(9468):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:750)

Anyone know what is the problem? 有人知道是什么问题吗?

Replace: 更换:

Uri.parse(movie.getMovieFilePath()

with: 有:

Uri.fromFile(new File(movie.getMovieFilePath()))

and see if that helps. 看看是否有帮助。 From your error message, your Uri in your Intent has no scheme, and this change should fix that problem. 从错误消息中,您在IntentUri没有方案,并且此更改应该可以解决该问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 找不到用于处理意图的活动{act = android.intent.action.View} - No activity found to handle intent { act=android.intent.action.View } 没有找到处理意图的活动{act=android,intent.action.VIEW} - No activity found to handle intent{act=android,intent.action.VIEW} 找不到活动来处理意图与操作和数据 - No Activity found to handle Intent with action and data android.content.ActivityNotFoundException:没有找到处理意图的活动{act=android.intent.action.VIEW dat=PendingIntent{} - android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=PendingIntent{ } 未找到处理 Intent 的活动 (act=android.intent.action.VIEW) 正在尝试安装 APK - No Activity Found to handle Intent (act=android.intent.action.VIEW) Trying to Install APK 未找到处理 Intent{typ=andrid.intent.action.PICK} 的活动 - No Activity found to handle Intent{typ=andrid.intent.action.PICK} 使用action_view意图后Android应用程序崩溃 - Android application crash after using action_view intent 用户 ACTION_VIEW 意图在 APP 中打开 URL - User ACTION_VIEW Intent to open URL In APP Android - 使用 action_view 意图打开本地图像 uri - Android - Open local image uri with action_view intent 如何从JobScheduler的onStartJob打开带有ACTION_VIEW意图的URL - How to open url with ACTION_VIEW intent from onStartJob of JobScheduler
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM