2016-04-12 18 views
2

Yerel videolarımı (ham klasör) Intent.ActionView kullanarak çalıştırmaya çalışıyorum. Niyet yarattığımda ve bir veri ve tip belirledikten sonra aktiviteyi başlattığımda bir hata alıyorum. Lütfen aşağıdaki kod & hataya bakın.Neden Intent.ActionView bir MP4 dosyasıyla bir hata atıyor

Dosya düşüncesine ulaşmak için bir sürü farklı yol denedim belki de bulunamadı, ancak sorun olduğunu düşünmüyorum. Farklı video formatlarını denedim ama aynı zamanda problem olduğunu da düşünmüyorum.

Hatalı çalışacak SetDataAndType içinde bir MP4 için bir URL kullanırsanız. Belki bu bir izin hatası mı? Bu noktada gerçekten hiçbir fikrim yok. Umarım birileri buraya girdiğim problemi açıklayabilir.

Kodu:

// Create the intent and push the mp4 to it, lets run a video! 
Intent videoIntent = new Intent (Intent.ActionView); 

// Video is MP4 format 
videoIntent.SetDataAndType (Uri.Parse ("android.resource://" + PackageName + "/raw/bunny"), "video/*"); 

// Crash here, Error: Android.Content.ActivityNotFoundExeception 
StartActivity (videoIntent); 

Hata:

Android.Content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=android.resource://com.test.videotest/raw/bunny typ=video/* } 
     at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in /Users/builder/data/lanes/3053/a94a03b5/source/mono/external/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143 
     at Android.Runtime.JNIEnv.CallNonvirtualVoidMethod (IntPtr jobject, IntPtr jclass, IntPtr jmethod, Android.Runtime.JValue* parms) [0x00084] in /Users/builder/data/lanes/3053/a94a03b5/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:1029 
     at Android.Content.ContextWrapper.StartActivity (Android.Content.Intent intent) [0x00070] in /Users/builder/data/lanes/3053/a94a03b5/source/monodroid/src/Mono.Android/platforms/android-19/src/generated/Android.Content.ContextWrapper.cs:3238 
     at VideoTest.MainActivity.<OnCreate>m__0 (System.Object , System.EventArgs) [0x00034] in /Users/alex/Projects/VideoTest/VideoTest/MainActivity.cs:33 
     at Android.Views.View+IOnClickListenerImplementor.OnClick (Android.Views.View v) [0x0000d] in /Users/builder/data/lanes/3053/a94a03b5/source/monodroid/src/Mono.Android/platforms/android-19/src/generated/Android.Views.View.cs:1780 
     at Android.Views.View+IOnClickListenerInvoker.n_OnClick_Landroid_view_View_ (IntPtr jnienv, IntPtr native__this, IntPtr native_v) [0x00011] in /Users/builder/data/lanes/3053/a94a03b5/source/monodroid/src/Mono.Android/platforms/android-19/src/generated/Android.Views.View.cs:1745 
     at at (wrapper dynamic-method) System.Object:123eb72a-af75-42a8-b3aa-717e415176e4 (intptr,intptr,intptr) 
     at --- End of managed exception stack trace --- 
     at android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=android.resource://com.test.videotest/raw/bunny typ=video/* } 
     at at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1798) 
     at at android.app.Instrumentation.execStartActivity(Instrumentation.java:1512) 
     at at android.app.Activity.startActivityForResult(Activity.java:3930) 
     at at android.app.Activity.startActivityForResult(Activity.java:3890) 
     at at android.app.Activity.startActivity(Activity.java:4213) 
     at at android.app.Activity.startActivity(Activity.java:4181) 
     at at mono.android.view.View_OnClickListenerImplementor.n_onClick(Native Method) 
     at at mono.android.view.View_OnClickListenerImplementor.onClick(View_OnClickListenerImplementor.java:29) 
     at at android.view.View.performClick(View.java:5204) 
     at at android.view.View$PerformClick.run(View.java:21155) 
     at at android.os.Handler.handleCallback(Handler.java:739) 
     at at android.os.Handler.dispatchMessage(Handler.java:95) 
     at at android.os.Looper.loop(Looper.java:148) 
     at at android.app.ActivityThread.main(ActivityThread.java:5422) 
     at at java.lang.reflect.Method.invoke(Native Method) 
     at at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
     at at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Not:

  1. Crea:

    Kolayca aşağıdaki kullanarak kendiniz bu deneyebilirsiniz a yeni bir Xamarin Android Uygulaması

  2. Yukarıdaki kodu tuşa tıklayarak tıklayın (proje ile önceden yapılmış)
  3. "Kaynaklar" içinde bir ham klasör oluşturun ve içine herhangi bir MP4 dosyası yerleştirin (onu tavla veya yeniden adlandırın) SetDataAndType)
  4. yılında simülatörü) bu yüzden Nexus 5X kullanılan işlemek için görünmüyor (bir cihazda uygulamayı çalıştırın

Dahası:

Cihazım sahiptir VLC Player hem de Google Fotoğraflar ins Her ikisi de, MP4 dosyalarını çalabilir. Ve data'u bir URL'ye (bir MP4 dosyasına bağlantı) değiştirdiğimde ispat olarak bu işe yarayacaktır.

Bu yol, VideoView kullanarak aynı yolu test ettiğim gibi bulunamayan bir sorun değildir ve iyi çalışıyor.

+0

kullanarak nasıl çekeceğidir. Olası yinelemeli [Videolarda varlıklar klasöründen nasıl oynanır raw folder?] (http://stackoverflow.com/questions/3028717/how-to-play-videos-in-android-from-assets-folder-or-raw-folder) – Jason

+0

@Jason İlgisizim Korkarım . Korkarım bunun bir şeyden çok bir Xamarin problemi. VideoView olarak diğer yöntemleri kullandığım takdirde dosya bulunuyor. – Ruddy

cevap

1

Bu, cihazınızda veya taklitçinizde mp4 dosyalarını işleyebilecek bir uygulama olmadığı için oluyor.

videoIntent.SetDataAndType (Uri.FromFile (new File($"android.resource://{PackageName}/{Resource.Raw.bunny}")), "video/*"); 

bu daha sonra açık bana Fotoğraflar seçim verir:

bu doğru URI görmediklerine ile bir şey todo düşünmek deneyin bu

PackageManager packageManager = getPackageManager(); 
if (intent.resolveActivity(packageManager) != null) { 
    // this intent can be handled 
    startActivity(intent); 
} else { 
    // no app found that can handle the intent 
    Toast.makeText(context, "No Intent available to handle action", Toast.LENGTH_LONG).show; 
} 
+0

Bunu soru üzerine göndermeliydim. Cihazımda VLC ve Google Fotoğraflar kurulu var. Sorularımda bir veriyi bir URL'ye (MP4 dosyası) değiştirirsem dediğim gibi iyi çalışır. – Ruddy

+0

Başka fikirlerin var mı? – Ruddy

1

gibi bir şey yapabilirsiniz kazasında önlemek için veya Video oynatıcı.

Ancak bence bu, videoyu SushiHangover'ın söylediği gibi yükleyebileceği gerçeğini gizliyor.

[Activity (Label = "VideoActivity")]   
public class VideoActivity : Activity 
{ 
     // Create your application here 
     VideoView videoView; 
     protected override void OnCreate (Bundle bundle) 
     { 
     base.OnCreate (bundle); 

     // Set our view from the "main" layout resource 
     SetContentView (Resource.Layout.VideoActivity); 
     videoView = FindViewById<VideoView> (Resource.Id.SampleVideoView); 
     videoView.SetMediaController(new MediaController(this)); 
     videoView.SetVideoPath ($"android.resource://{PackageName}/{Resource.Raw.bunny}"); 
     videoView.RequestFocus(); 
     videoView.Start(); 
    } 
} 

Ve düzen

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 


<VideoView 
    android:id="@+id/SampleVideoView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"/> 

</LinearLayout> 

DÜZENLEME

başında '$' geçerli:

herhangi bir neden bu kadar gibi başka Aktivite bir ViewVideo orada kullanabilirsiniz mı aC# 6 Dize enterpolasyonu https://msdn.microsoft.com/en-GB/library/dn961160.aspx

Çözümle ilgili olarak, uygulamadaki Raw klasörüne video dosyası yerleştirmenin, herhangi bir amacın uygulamanın dizinindeki gibi oynatamayacağı anlamına geleceğini düşünüyorum. Bu yüzden en iyi seçenekler videonun nasıl oynanabilir bir klasöre (sd kartına kopyalanması ideal değil) ya da videoyu bir videoView

+0

'Uri.Parse' ile ilgili problem," kaynak: // "şemasını, ele alamayan bir amaç için geçirmenizdir,' FromFile'ı kullanarak, bir 'file: //' şemasıyla bitebilirsiniz. Android OS'nin bu amaç için bir amaç bulabileceği video referansı (veya bu durumda çoklu olanlar) – SushiHangover

+0

TBH bu harika bir çözüm değil, izin sorunlarının olacağını düşünün. Dosyayı bir videoView'den çalamamanın bir nedeni var mı? –

+0

İlk satırınız yeni dosyadaki $ $ 'dan bir hata atar ($ '.. $' In ne olduğunu bilmezsiniz, eğer bunun harika olacağını açıklarsanız. Ayrıca' VideoView' kullanamıyorum. Tam ekran ile çok glitchy (sürükleyici mod) Fiziksel düğmeleri olmayan cihazlarda "donanım düğmeleri" ekranda görüntülenebilir. 'VideoView' kullanırken bu düğmeler video kontrollerini (bazı cihazlarda) ve diğerlerini videonun üzerine tıkladığınızda ui bayraklarını sıfırlar, böylece tam ekranın sürükleyici modundan çıkar. – Ruddy

İlgili konular