2012-01-17 7 views
3

アンドロイドのメディアプレイヤーで再生されるように録画されたビデオファイルを再生したいと思います。メディアプレーヤーに電話をかけて、渡されたURIの対応するファイルを再生したいと思います。私が例外ActivityNotFoundを手に入れようとしている人は誰でもコードを教えてくれますか?アンドロイドメディアプレーヤーでファイルを再生

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     if (resultCode == RESULT_OK) { 
      if (requestCode == REQUEST_VIDEO_CAPTURED) { 
       uriVideo = data.getData(); 
       Toast.makeText(VedioRecording.this, uriVideo.getPath(), 
         Toast.LENGTH_LONG).show(); 
      } 
     } else if (resultCode == RESULT_CANCELED) { 
      uriVideo = null; 
      Toast.makeText(VedioRecording.this, "Cancelled!", Toast.LENGTH_LONG) 
        .show(); 
     } 
     if (requestCode == 2) { 
      selectedImageUri = data.getData(); 

      // OI FILE Manager 
      filemanagerstring = selectedImageUri.getPath(); 

      // MEDIA GALLERY 
      selectedImagePath = getPath(selectedImageUri); 

      Intent intent1 = new Intent(android.provider.MediaStore.INTENT_ACTION_MUSIC_PLAYER).setData(selectedImageUri); 

      startActivityForResult(intent1, 3); 
//   videoviewPlay.setVideoURI(selectedImageUri); 
//   videoviewPlay.start(); 
     } 
     if (requestCode == 3) { 

     } 
    } 


    private String getPath(Uri uri) { 
     String[] projection = { MediaStore.Video.Media.DATA }; 
     Cursor cursor = managedQuery(uri, projection, null, null, null); 
     if (cursor != null) { 
      // HERE YOU WILL GET A NULLPOINTER IF CURSOR IS NULL 
      // THIS CAN BE, IF YOU USED OI FILE MANAGER FOR PICKING THE MEDIA 
      int column_index = cursor 
        .getColumnIndexOrThrow(MediaStore.Video.Media.DATA); 
      cursor.moveToFirst(); 
      return cursor.getString(column_index); 
     } else { 
      return null; 
     } 
    } 
} 

これは、私はあなたがマニフェストにそれを宣言しなくても、作成した活動を起動しようとすると、あなたがActivityNotFoundの例外を取得する最も一般的なシナリオがあるactivitynotfound例外に

+0

はあなたのコードを通り過ぎてくださいすることができ、私を助けたコードですか? –

答えて

4

をgetingています私のコードです。

アクティビティの起動に使用するコードを投稿してください。あなたは、外部アプリケーションからのフレームワークが提供されなければならないアクティビティを使用しようとしている場合、あなただけのテントコード掲示した後、誤って

アップデートを設定することができる...

あなたのコードでは、と思われますインテントアクションINTENT_ACTION_MUSIC_PLAYERを使用し、画像URLをデータとして渡す(画像へのパスか、変数名を誤って指定していますか?)。そのシナリオを処理するために登録されたインテントレシーバがシステムにないため、ActivityNotFoundExceptionが発生します。私は通常Intent.ACTION_VIEWを使用し、データと一緒にMIMEタイプを通過する

http://developer.android.com/reference/android/provider/MediaStore.html#INTENT_ACTION_MUSIC_PLAYER

:あなたはこの定数のドキュメントを見ればまた、あなたは、彼らはそれがいくつかの点で非推奨マークがわかります。 「/ *ビデオ」setDataAndTypeへのMIMEタイプを渡すことによって、次のような何か...

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.parse(pathToVideoFile), "video/*"); 
startActivity(intent); 

は、システムへのあなたの要求をより具体的なものです。

インテントを処理できるかどうかを調べるためにシステムに問い合わせる場合(つまり、コードを実行するユーザーのデバイスにインテントを処理できるアクティビティが登録されていることを意味します)、PackageManager.queryIntentActivitiesメソッドを使用できます。

queryIntentActivities

+0

メディアプレーヤを使用して、マニフェストファイルに与えるべきすべてのアクセス許可。 –

+0

メディアファイルを再生するためにマニフェストにアクセス許可を指定する必要はありません。 – Rich

1
String extension = MimeTypeMap 
         .getFileExtensionFromUrl(selectedImagePath); 
       String mimeType = MimeTypeMap.getSingleton() 
         .getMimeTypeFromExtension(extension); 
       Intent mediaIntent = new Intent(Intent.ACTION_VIEW); 
       mediaIntent.setDataAndType(Uri.parse(selectedImagePath), 
         mimeType); 
       startActivity(mediaIntent); 

これは

関連する問題