[Monkey] Android Java Browser Problem

Übersicht Andere Programmiersprachen Beginners-Corner

Neue Antwort erstellen

Midimaster

Betreff: Android Java Browser Problem

BeitragMo, Apr 15, 2013 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
nachdem es hier nun immer wieder auch Antworten auf Fragen zu Java gibt, werde ich mein Problem hier mal reinstellen.


Ich möchte in einer Monkey App in Android den Browser rufen. Es gelingt mir auch schon mit folgendem Java-Code:

Code: [AUSKLAPPEN]
   static void launchBrowser(String address) {
      android.net.Uri uriUrl = android.net.Uri.parse(address);
      android.content.Intent launchBrowserActivity = new android.content.Intent(android.content.Intent.ACTION_VIEW, uriUrl);
      BBAndroidGame._androidGame._activity.startActivity(launchBrowserActivity);
   }


Als Adresse kann ich sowas wie....

Code: [AUSKLAPPEN]
Extern   
   #If TARGET="android"
      Function LaunchNativeBrowser:Void(address:String) = "SystemPeter.launchBrowser"
   #Endif
Public
.....

LaunchNativeBrowser("http://www.midimaster.de/temp/anleitung.html")


übergeben und erhalte dann diese Seite in sich öffnenden Browser des Smartphone. Nun habe ich diese Datei auf die SD-Karte kopiert und mit dem Browser direkt geöffnet. Als Adresse habe ich eingegeben:

file://sdcard/testA/anleitung.html

Das klappt auch. Der Browser öffnet die Datei. Auch dass direkte Anklicken der Datei funktioniert. Es öffnet sogar den besonders schönen HTMLViewer.

Aber... jeder Versuch diese Adresse mit der Monkey Funktion zu erreichen wird mit einem Absturz bestraft. Was mache ich falsch?
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

FWeinb

ehemals "ich"

BeitragMo, Apr 15, 2013 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Ausgabe von LogCat wäre wohl ganz nützlich um herauszufinden was da schiefgeht. Die einzige Vermutung die ich habe ist, das du deiner App keine Berechtigung gegeben hast auf die SD Karte zuzugreifen? READ_EXTERNAL_STORAGE solltest du wohl brauchen. Hier sind noch ein paar mehr: http://developer.android.com/r...ssion.html


MfG

ich
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs

Midimaster

BeitragMo, Apr 15, 2013 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
LogCat? Ich befürchte, bereits hier kenne ich mich zu wenig mit Java aus. Monkey V69 protokolliert ja mit, was das Smartphone so auf der Console ausgibt. Hier ist das Protokoll:

Zitat:

BUILD SUCCESSFUL
Total time: 18 seconds
--------- beginning of /dev/log/main
E/AndroidRuntime(11405): feature code ==> cannot open file
E/StatusBarPolicy( 1536): ecio: 40
E/StatusBarPolicy( 1536): iconLevel: 4
E/SensorManager(11413): registerListener :: handle = 0 name= K2DM delay= 20000 Listener= com.monkey.BBMonkeyGame@40522b60
E/SensorManager(11413): =======>>>Sensor Thread RUNNING <<<========
E/SensorManager(11413): reg :: handle = 0
E/ (11413): Creating OpenGL 1.1 Session



I/[Monkey](11413): Monkey Runtime Error : No Activity found to handle Intent { act=android.intent.action.VIEW dat=file://sdcard/testA/Anleitung.html }
I/[Monkey](11413): C:/Monkey/ScoreTrainer/TestDpi.monkey<34>
I/[Monkey](11413): C:/MonkeyPro69/modules/mojo/app.monkey<60>
--------- beginning of /dev/log/system
E/AndroidRuntime(11413): FATAL EXCEPTION: main
E/AndroidRuntime(11413): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file://sdcard/testA/Anleitung.html }
E/AndroidRuntime(11413): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1409)
E/AndroidRuntime(11413): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)
E/AndroidRuntime(11413): at android.app.Activity.startActivityForResult(Activity.java:2827)
E/AndroidRuntime(11413): at android.app.Activity.startActivity(Activity.java:2933)
E/AndroidRuntime(11413): at com.monkey.SystemPeter.launchBrowser(MonkeyGame.java:2525)
E/AndroidRuntime(11413): at com.monkey.c_Game.p_OnUpdate(MonkeyGame.java:2617)
E/AndroidRuntime(11413): at com.monkey.c_GameDelegate.UpdateGame(MonkeyGame.java:2681)
E/AndroidRuntime(11413): at com.monkey.BBGame.UpdateGame(MonkeyGame.java:550)
E/AndroidRuntime(11413): at com.monkey.BBAndroidGame.UpdateGame(MonkeyGame.java:1196)
E/AndroidRuntime(11413): at com.monkey.BBAndroidGame$GameTimer.run(MonkeyGame.java:782)
E/AndroidRuntime(11413): at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime(11413): at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(11413): at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime(11413): at android.app.ActivityThread.main(ActivityThread.java:3687)
E/AndroidRuntime(11413): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(11413): at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime(11413): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
E/AndroidRuntime(11413): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
E/AndroidRuntime(11413): at dalvik.system.NativeStart.main(Native Method)
E/liblog ( 1472): failed to call dumpstate
E/ ( 1472): Dumpstate > /data/log/dumpstate_app_com_monkey_error
E/Launcher( 1558): setWindowOpaque()
E/StatusBarPolicy( 1536): ecio: 39
E/StatusBarPolicy( 1536): iconLevel: 4
Done.


und dies hab ich als Permission freigegeben:
Code: [AUSKLAPPEN]
   <uses-permission android:name="android.permission.INTERNET" />
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


obwohl man glaube ich für sowas gar nicht den direkten Zugriff auf die SD-Card braucht. Schließlich will ich ja nur einen anderen Prozeß aufrufen, der die Arbeit machen soll, oder?
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

DAK

BeitragMo, Apr 15, 2013 23:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Kleines bisschen Googlen nach "No Activity found to handle Intent { act=android.intent.action.VIEW dat=file://sdcard/" (aus dem Stacktrace) hat mir diese Seite gegeben: http://stackoverflow.com/quest...id-browser

Vor allem die Antwort von junto hilft weiter.
Dein Java-Code sollte etwa so ausschauen:

Code: [AUSKLAPPEN]

    Uri uri = Uri.parse(address);
    Intent browserIntent = new Intent(Intent.ACTION_VIEW);
    browserIntent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
    browserIntent.setData(uri);
    startActivity(browserIntent);


Begründung:
Startest du den Intent nur mit

android.content.Intent launchBrowserActivity = new android.content.Intent(android.content.Intent.ACTION_VIEW, uriUrl);

dann sagst du ihm nur, hier hast du eine Uri, such dir ein Programm aus, mit dem man das öffnen kann und zeigs mir an.
Für http:// weiß er, da braucht man einen Browser, aber file:// kann ja alles sein.


Mit

browserIntent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");

spezifizierst du, welches Programm das File öffnen soll.


Ein Tipp am Rande: aufgrund der schieren Anzahl an Java- und Android-Entwickler, sind fast alle Probleme, auf die du stoßen kannst, schon mal wo behandelt worden. Google einfach nach der ersten Zeile im Java-Stacktrace und du findest meistens was.

Ich hab nix dagegen, dir Fragen zu beantworten, im Gegenteil, aber vielleicht kriegst du so deine Antworten schneller und ohne Wartezeit Wink
Gewinner der 6. und der 68. BlitzCodeCompo

Midimaster

BeitragDi, Apr 16, 2013 0:08
Antworten mit Zitat
Benutzer-Profile anzeigen
ah! tolle antwort. klingt logisch, muss man aber erst mal draufkommen. Ich dachte natürlich das System würde sich auch die Extension anschauen, und von daher schon wissen, wer die Datei am besten anzeigen könnte.

Danke auch für den Tipp, nach der ersten Zeile des Stacktrace zu googlen. Da ich wie gesagt, nix von Java weiß, hatte ich bis jetzt an einen Fehler in Monkey-Teil geglaubt.

Ich werde das gleich mal probieren....

Wow und tausend Dank! Es funzt!

da werde ich gleich mal weitere Experimente machen...
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Neue Antwort erstellen


Übersicht Andere Programmiersprachen Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group