동영상 재생을위한 Android 의도?
인 텐트를 시작하여 Android에서 동영상을 재생하려고합니다. 내가 사용하는 코드는 다음과 같습니다.
tostart = new Intent(Intent.ACTION_VIEW);
tostart.setDataAndType(Uri.parse(movieurl), "video/*");
startActivity(tostart);
대부분의 휴대 전화에서 작동하지만 HTC Hero 에서는 작동하지 않습니다 . 약간 다른 동영상 플레이어를로드하는 것 같습니다. 이것은 그것에 던져진 첫 번째 비디오를 재생합니다. 그러나 그 이후의 모든 비디오는 응답하지 않습니다. (일부 루프에 유지됩니다).
내가 명시 적으로 추가하면
tostart.setClassName("com.htc.album","com.htc.album.ViewVideo");
(시작 활동 전) HTC Hero 에서 작동합니다 . 그러나 이것은 HTC 전용 통화이므로 다른 전화기 (예 : G1 ) 에서는이 코드를 실행할 수 없습니다 . 온 G1 이 작동합니다 :
tostart.setClassName("com.android.camera","com.android.camera.MovieView"); //g1 version
그러나이 의도는 영웅에게서 빠져 있습니다. 모든 Android 기기에서 지원해야하는 인 텐트 / 클래스 이름 목록을 아는 사람이 있습니까? 아니면 비디오를 시작할 특정 것입니까? 감사!
인 텐트에 setDataAndType 사용
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(newVideoPath));
intent.setDataAndType(Uri.parse(newVideoPath), "video/mp4");
startActivity(intent);
MIME으로 "video / mp4"를 사용하거나 유형을 모르는 경우 "video / *"를 사용하십시오.
나는 공개 된 API라고 생각한 것을 사용하여 Hero와 함께 이것을 보았습니다. 결국, 나는 인 텐트를받을 수 있는지 확인하기 위해 테스트를 사용했습니다.
private boolean isCallable(Intent intent) {
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
일반적으로 활동을 시작할 때 사용 :
final Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.camera", "com.android.camera.CropImage");
if (isCallable(intent)) {
// call the intent as you intended.
} else {
// make alternative arrangements.
}
명백한 : 비공개 API를 사용하여이 경로를 따라가는 경우 확실히 작동하는 폴백을 절대적으로 제공해야합니다. 완벽 할 필요는 없습니다.이 핸드셋 / 장치에 대해 지원되지 않는다고 말하는 토스트 일 수 있지만 잡히지 않은 예외는 피해야합니다. 명백한 끝.
나는 찾을 텐트 프로토콜의 열기 텐트 레지스트리 매우 유용하지만, 나는 절대적으로 지원해야 의도의 TCK 유형 목록에 해당을 발견하지 않은, 그리고 응용 프로그램이 서로 다른 단말기를 무엇의 예.
다음 코드는 나를 위해 잘 작동합니다.
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(movieurl));
startActivity(intent);
지금부터 API 24 이후 Uri.parse(filePath)
에는 작동하지 않습니다. 이것을 사용해야합니다
final File videoFile = new File("path to your video file");
Uri fileUri = FileProvider.getUriForFile(mContext, "{yourpackagename}.fileprovider", videoFile);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(fileUri, "video/*");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//DO NOT FORGET THIS EVER
startActivity(intent);
그러나 이것을 사용하기 전에 파일 공급자의 작동 방식을 이해해야합니다. 파일 공급자를 더 잘 이해 하려면 공식 문서 링크 로 이동 하십시오.
디버그 정보 에서 MainActivity 의 VideoIntent 가 비디오 경로를 VideoActivity 로 보낼 수없는 것 같습니다 . 에서 오류가 발생합니다 . 나는 그 코드 중 일부를 다음과 같이 생각합니다 .NullPointerException
uriString
VideoActivity
Intent myIntent = getIntent();
String uri = myIntent.getStringExtra("uri");
Bundle b = myIntent.getExtras();
startVideo(b.getString(uri));
Cannot receive the uri from here:
public void playsquirrelmp4(View v) {
Intent VideoIntent = (new Intent(this, VideoActivity.class));
VideoIntent.putExtra("android.resource://" + getPackageName()
+ "/"+ R.raw.squirrel, uri);
startActivity(VideoIntent);
}
ReferenceURL : https://stackoverflow.com/questions/1572107/android-intent-for-playing-video
'programing' 카테고리의 다른 글
Kafka 주제의 복제본 수를 변경하는 방법은 무엇입니까? (0) | 2021.01.18 |
---|---|
.net 개체의 크기 확인 (0) | 2021.01.18 |
emacs lisp, 버퍼 메이저 모드를 얻는 방법? (0) | 2021.01.18 |
cx_freeze를 사용할 때 다른 파일을 어떻게 묶을 수 있습니까? (0) | 2021.01.18 |
제거하는 가장 쉬운 방법은 무엇입니까 (0) | 2021.01.18 |