Sound auswählen

  • 4 Antworten
  • Neuester Beitrag
Diskutiere Sound auswählen im Android App Entwicklung im Bereich Betriebssysteme & Apps.
T

The_S

Fortgeschrittenes Mitglied
Hallo,

der Benutzer meiner App soll einen Ton auswählen. Hierzu verwende ich in der onClick-Methode folgenden Code:

Code:
startActivityForResult(new Intent(RingtoneManager.ACTION_RINGTONE_PICKER), RINGTONE_PICKER);
meine onActivityResult-Methode sieht wie folgt aus:

Code:
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (requestCode == RINGTONE_PICKER) {
			if (resultCode == RESULT_OK && data.hasExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)) {
				Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
				sound.setText(uri.toString());
			}
		}
		super.onActivityResult(requestCode, resultCode, data);
	}
Nachdem ich den Auswahldialog bestätigt habe, erhalte ich beim Aufruf von uri.toString() eine NullPointerException und meine App stürzt ab:

Code:
02-11 13:59:14.402: ERROR/AndroidRuntime(938): FATAL EXCEPTION: main
02-11 13:59:14.402: ERROR/AndroidRuntime(938): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=3, result=-1, data=Intent { (has extras) }} to activity {meinpackage/meinpackage.MeineActivity}: java.lang.NullPointerException
02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3515)
02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557)
02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at android.app.ActivityThread.access$2800(ActivityThread.java:125)
02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063)
02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at android.os.Looper.loop(Looper.java:123)
02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at android.app.ActivityThread.main(ActivityThread.java:4627)
02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at java.lang.reflect.Method.invokeNative(Native Method)
02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at java.lang.reflect.Method.invoke(Method.java:521)
02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at dalvik.system.NativeStart.main(Native Method)
02-11 13:59:14.402: ERROR/AndroidRuntime(938): Caused by: java.lang.NullPointerException
02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at meinpackage.activities.MeineActivity.onActivityResult(AddAlarmActivity.java:90)
02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at android.app.Activity.dispatchActivityResult(Activity.java:3890)
02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3511)
02-11 13:59:14.402: ERROR/AndroidRuntime(938):     ... 11 more
Ein paar Sekunden später erhalte ich noch folgende Warnung:

Code:
02-11 13:59:40.672: WARN/SQLiteCompiledSql(200): Releasing statement in a finalizer. Please ensure that you explicitly call close() on your cursor: SELECT _id, title, "content://media/external/audio/media", title_key FROM audio WHERE (is_ringtone=1
02-11 13:59:40.672: WARN/SQLiteCompiledSql(200): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:62)
02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:100)
02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:330)
02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at com.android.providers.media.MediaProvider.query(MediaProvider.java:1468)
02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at android.content.ContentProvider$Transport.bulkQuery(ContentProvider.java:150)
02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:111)
02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at android.os.Binder.execTransact(Binder.java:288)
02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at dalvik.system.NativeStart.run(Native Method)
02-11 13:59:40.692: WARN/SQLiteCompiledSql(200): Releasing statement in a finalizer. Please ensure that you explicitly call close() on your cursor: SELECT _id, title, "content://drm/audio", title AS title_key FROM audio ORDER BY title
02-11 13:59:40.692: WARN/SQLiteCompiledSql(200): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:62)
02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:100)
02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:330)
02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:280)
02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at com.android.providers.drm.DrmProvider.query(DrmProvider.java:177)
02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.content.ContentProvider$Transport.bulkQuery(ContentProvider.java:150)
02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:111)
02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.os.Binder.execTransact(Binder.java:288)
02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at dalvik.system.NativeStart.run(Native Method)
Was mache ich falsch? Fehler tritt sowohl auf meinem Desire als auch im Emulator auf.

Danke und Grüße
Stefan
 
DieGoldeneMitte

DieGoldeneMitte

Experte
Welches ist den Zeile 90 (da kommt die NPE her)? Doch nicht etwa die mit dem sound.setText()? :blink:
 
T

The_S

Fortgeschrittenes Mitglied
Doch, hab ich ja geschrieben ;) . uri ist null. Habe ich auch vorher verifiziert (hier aber nicht mehr ersichtlich).
 
T

The_S

Fortgeschrittenes Mitglied
OK, wenn ich den Default-Wert im Emulator auswähle funktionierts. Wähle ich hingegen "Silent" im Emulator aus, bekomme ich die Fehlermeldung. Kann es sein, dass ich noch eine Berechtigung setzten muss? Falls ja, welche?

Danke!
 
T

The_S

Fortgeschrittenes Mitglied
Hab die Permission gesetzt, dass man auf die SD-Karte schreiben möchte. Jetzt funktionierts (warum auch immer, wird ja gelesen und nicht geschrieben)