80,472
社区成员




05-28 17:05:03.466: E/AndroidRuntime(32226): FATAL EXCEPTION: main
05-28 17:05:03.466: E/AndroidRuntime(32226): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=4, result=-1, data=Intent { dat=content://media/external/audio/media/229 }} to activity {com.agilemobi.activity/com.agilemobi.activity.AudioActivity}: java.lang.IllegalStateException: Unknown URL: content://media/external/audio/albumart/-1
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.app.ActivityThread.deliverResults(ActivityThread.java:3734)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3776)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.app.ActivityThread.access$2800(ActivityThread.java:135)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2166)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.os.Handler.dispatchMessage(Handler.java:99)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.os.Looper.loop(Looper.java:144)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.app.ActivityThread.main(ActivityThread.java:4937)
05-28 17:05:03.466: E/AndroidRuntime(32226): at java.lang.reflect.Method.invokeNative(Native Method)
05-28 17:05:03.466: E/AndroidRuntime(32226): at java.lang.reflect.Method.invoke(Method.java:521)
05-28 17:05:03.466: E/AndroidRuntime(32226): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
05-28 17:05:03.466: E/AndroidRuntime(32226): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-28 17:05:03.466: E/AndroidRuntime(32226): at dalvik.system.NativeStart.main(Native Method)
05-28 17:05:03.466: E/AndroidRuntime(32226): Caused by: java.lang.IllegalStateException: Unknown URL: content://media/external/audio/albumart/-1
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.os.Parcel.readException(Parcel.java:1255)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:160)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.content.ContentProviderProxy.insert(ContentProviderNative.java:450)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.content.ContentResolver.insert(ContentResolver.java:587)
05-28 17:05:03.466: E/AndroidRuntime(32226): at com.agilemobi.widget.AudioWidget.setBinaryData(AudioWidget.java:225)
05-28 17:05:03.466: E/AndroidRuntime(32226): at com.agilemobi.view.ODKView.setBinaryData(ODKView.java:47)
05-28 17:05:03.466: E/AndroidRuntime(32226): at com.agilemobi.activity.AudioActivity.onActivityResult(AudioActivity.java:158)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.app.Activity.dispatchActivityResult(Activity.java:3931)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.app.ActivityThread.deliverResults(ActivityThread.java:3730)
05-28 17:05:03.466: E/AndroidRuntime(32226): ... 11 more
private void deleteMedia() {
// get the file path and delete the file
File f = new File(Constants.INSTANCEFOLDER + "/" + mBinaryName);
if (!f.delete()) {
Log.i(TAG, "Failed to delete " + f);
}
// clean up variables
mBinaryName = null;
}
private String getPathFromUri(Uri uri) {
String[] audioProjection = { Audio.Media.DATA };
Cursor c = ((Activity) getContext()).managedQuery(uri, audioProjection,
null, null, null);
String audioPath = null;
if (c != null) {
((Activity) getContext()).startManagingCursor(c);
int column_index = c.getColumnIndexOrThrow(Audio.Media.DATA);
if (c.getCount() > 0) {
c.moveToFirst();
audioPath = c.getString(column_index);
}
} else {
Toast.makeText(this.getContext(),
"Can not open selected media file.", Toast.LENGTH_LONG)
.show();
}
return audioPath;
}
@Override
public void setBinaryData(Object binaryuri) {
// TODO Auto-generated method stub
if (mBinaryName != null) {
deleteMedia();
}
Log.i("AudioWidget binaryuri", binaryuri + "");
// get the file path and create a copy in the instance folder
String binaryPath = getPathFromUri((Uri) binaryuri);
Log.i("AudioWidget binaryPath", binaryPath);
String extension = binaryPath.substring(binaryPath.lastIndexOf("."));
String destAudioPath = Constants.INSTANCEFOLDER + "/"
+ System.currentTimeMillis() + extension;// 项目对应的存放路径
if (binaryPath != null) {
File source = new File(binaryPath);
File newAudio = new File(destAudioPath);
FileUtils.copyFile(source, newAudio);// 将source路径下的文件copy到newAudio
if (newAudio.exists()) {
// Add the copy to the content provier
ContentValues values = new ContentValues(6);
values.put(Audio.Media.TITLE, newAudio.getName());
values.put(Audio.Media.DISPLAY_NAME, newAudio.getName());
values.put(Audio.Media.DATE_ADDED, System.currentTimeMillis());
values.put(Audio.Media.DATA, newAudio.getAbsolutePath());
System.out.println("Audio.Media.EXTERNAL_CONTENT_URI:"
+ Audio.Media.EXTERNAL_CONTENT_URI);// content://media/external/audio/media
Uri AudioURI = getContext().getContentResolver().insert(
Audio.Media.EXTERNAL_CONTENT_URI, values);
Log.i(TAG,
"Inserting AUDIO returned uri = " + AudioURI.toString());
} else {
Log.e(TAG, "Inserting Audio file FAILED");
}
mBinaryName = newAudio.getName();
enabledAudioPlayBtn();
mWaitingForData = false;
}
}
mChooseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Intent i = new Intent(Intent.ACTION_GET_CONTENT);
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
i.setType("image/*");
((Activity) getContext())
.startActivityForResult(i, FormEntryActivity.IMAGE_CHOOSER);
}
});