Related
I update SDK to 22.0.1 and did related ADT updates. After updates my successfully running code has broken down with following error in finding xml resource-
unable to resolve static field 1108 (layout_name) in pkgname/R$layout
.
.
.
some error log....
.
.
.
java.lang.NoClassDefFoundError: pkgname.R$layout
Please tell me what can be the reason of this error and how can I resolve it?
Code:
class ProblemFixer extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
tryToFixTheProblem();
}
protected void tryToFixTheProblem()
{
try
{
cleanProject();
}
catch(FailedToFixProblemException e)
{
boolean isProblemFixed = new RestartExclipse().execute().getResponse();
if(isProblemFixed)
{
enjoy();
}
else
{
deleteAndReimportProject();
}
}
}
private void deleteAndReimportProject()
{
if(success)
{
enjoy();
}
else
{
finish();
//TODO: Open browser and search for solution;
}
}
}
Sent from my U8120 using Tapatalk 2
pedja1 said:
Code:
class ProblemFixer extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
tryToFixTheProblem();
}
protected void tryToFixTheProblem()
{
try
{
cleanProject();
}
catch(FailedToFixProblemException e)
{
boolean isProblemFixed = new RestartExclipse().execute().getResponse();
if(isProblemFixed)
{
enjoy();
}
else
{
deleteAndReimportProject();
}
}
}
private void deleteAndReimportProject()
{
if(success)
{
enjoy();
}
else
{
finish();
//TODO: Open browser and search for solution;
}
}
}
Sent from my U8120 using Tapatalk 2
Click to expand...
Click to collapse
Haha. :laugh:
Good job. :good:
That was funny lol.
So to recap, Clean your project and restart eclipse. If still doesn't work, delete your project and reimport it.
Cleaing project usualy fixes NoClassDefFound error, if it doest he can also try to restart eclipse and/or reimport project
Sent from my U8120 using Tapatalk 2
pedja1 said:
Code:
class ProblemFixer extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
tryToFixTheProblem();
}
protected void tryToFixTheProblem()
{
try
{
cleanProject();
}
catch(FailedToFixProblemException e)
{
boolean isProblemFixed = new RestartExclipse().execute().getResponse();
if(isProblemFixed)
{
enjoy();
}
else
{
deleteAndReimportProject();
}
}
}
private void deleteAndReimportProject()
{
if(success)
{
enjoy();
}
else
{
finish();
//TODO: Open browser and search for solution;
}
}
}
Sent from my U8120 using Tapatalk 2
Click to expand...
Click to collapse
Can I have the XML for this too?
:laugh:
Your project properties --> Build Path --> Order and Export --> check on Android Private Libraries
Hi XDA-Developers users!
I'ts easy, how can I make this processdialog visible?
Code:
public void onClick(DialogInterface dialog, int id) {
// metodo que se debe implementar
dialog.cancel();
pd = ProgressDialog.show(FixWifiActivity.this, "dialog title", "dialog message", true);
try {
ProcessBuilder pb = new ProcessBuilder(new String[] { "su", "-c", "/system/bin/reboot" });
java.lang.Process process = pb.start();
process.waitFor();
} catch (IOException e) {
}
// TODO Auto-generated method stub
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} });
AlertDialog alert = builder.create();
alert.show();
}
}
Enviado desde mi Galaxy Mini Plus 4G usando Tapatalk 2
Please...
Enviado desde mi Galaxy Mini Plus 4G usando Tapatalk 2
Come on... It's easy...
Enviado desde mi Galaxy Mini Plus 4G usando Tapatalk 2
Do it like this:
Code:
ProgressDialog pd = new ProgressDialog(context);
pd.setTitle("My title");
pd.setMessage("Operation...");
pd.show();
nikwen said:
Do it like this:
Code:
ProgressDialog pd = new ProgressDialog(context);
pd.setTitle("My title");
pd.setMessage("Operation...");
pd.show();
Click to expand...
Click to collapse
Ok, I'm going to try it
Enviado desde mi Galaxy Mini Plus 4G usando Tapatalk 2
nikwen said:
Do it like this:
Code:
ProgressDialog pd = new ProgressDialog(context);
pd.setTitle("My title");
pd.setMessage("Operation...");
pd.show();
Click to expand...
Click to collapse
No no no, you don't understand me What I mean is that I want to make the ProgressDialog visible becouse the reboot process block it.
Try to make a code that shows the ProcessDialog and then give it to me. Please...
EDIT:
What I want is show a progress dialog while a process is running, I think I need something like asynktask.
Enviado desde mi Galaxy Mini Plus 4G usando Tapatalk 2
alert.show(); does not work?
alert.show(); does not work?
DannyGM16 said:
Hi XDA-Developers users!
I'ts easy, how can I make this processdialog visible?
Code:
public void onClick(DialogInterface dialog, int id) {
// metodo que se debe implementar
dialog.cancel();
pd = ProgressDialog.show(FixWifiActivity.this, "dialog title", "dialog message", true);
try {
ProcessBuilder pb = new ProcessBuilder(new String[] { "su", "-c", "/system/bin/reboot" });
java.lang.Process process = pb.start();
process.waitFor();
} catch (IOException e) {
}
// TODO Auto-generated method stub
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} });
AlertDialog alert = builder.create();
alert.show();
}
}
Enviado desde mi Galaxy Mini Plus 4G usando Tapatalk 2
Click to expand...
Click to collapse
DannyGM16 said:
No no no, you don't understand me What I mean is that I want to make the ProgressDialog visible becouse the reboot process block it.
Try to make a code that shows the ProcessDialog and then give it to me. Please...
EDIT:
What I want is show a progress dialog while a process is running, I think I need something like asynktask.
Enviado desde mi Galaxy Mini Plus 4G usando Tapatalk 2
Click to expand...
Click to collapse
If you want the progress to.continue while doing a background task, your best and easy bet is to use async task. Create and show progress dialog in onPreExecute() and do the task in doInBackground() and close the progress in onPostExecute().
Sent from my GT-N7000 using xda app-developers app
vijai2011 said:
If you want the progress to.continue while doing a background task, your best and easy bet is to use async task. Create and show progress dialog in onPreExecute() and do the task in doInBackground() and close the progress in onPostExecute().
Sent from my GT-N7000 using xda app-developers app
Click to expand...
Click to collapse
Thank's a lot, this is what I mean ;D
Enviado desde mi Galaxy Mini Plus 4G usando Tapatalk 2
vijai2011 said:
If you want the progress to.continue while doing a background task, your best and easy bet is to use async task. Create and show progress dialog in onPreExecute() and do the task in doInBackground() and close the progress in onPostExecute().
Sent from my GT-N7000 using xda app-developers app
Click to expand...
Click to collapse
... can you give me an example code of AsyncTask?, I can't find an understable explanation on Internet (for me)
Enviado desde mi Galaxy Mini Plus 4G usando Tapatalk 2
Here it is with progress dialog
Code:
class MyAsyncTask extends AsyncTask<Void, Void, Void> {
ProgressDialog prog;
[user=439709]@override[/user]
protected void onPreExecute() {
prog = new ProgressDialog(youractivity.this);
prog.setCancelable(false);
prog.setTitle("Title");
prog.setMessage("Message");
prog.setIndeterminate(true);
prog.show();
}
protected Void doInBackground(Void... params) {
//Your task to be done in Background while progress dialog is showing
return null;
}
[user=439709]@override[/user]
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
prog.dismiss(); //Progress is dismissed after background task is done
}
}
vijai2011 said:
Here it is with progress dialog
Code:
class MyAsyncTask extends AsyncTask<Void, Void, Void> {
ProgressDialog prog;
[user=439709]@override[/user]
protected void onPreExecute() {
prog = new ProgressDialog(youractivity.this);
prog.setCancelable(false);
prog.setTitle("Title");
prog.setMessage("Message");
prog.setIndeterminate(true);
prog.show();
}
protected Void doInBackground(Void... params) {
//Your task to be done in Background while progress dialog is showing
return null;
}
[user=439709]@override[/user]
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
prog.dismiss(); //Progress is dismissed after background task is done
}
}
Click to expand...
Click to collapse
Why it does not work?
Code:
public void End() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Es necesario reiniciar")
.setTitle("Instalacion satisfactoria!")
.setCancelable(false)
.setNegativeButton("Hacerlo mas tarde",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
})
.setPositiveButton("Reiniciar",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
class MyAsyncTask extends AsyncTask<Void, Void, Void> {
ProgressDialog prog;
[user=439709]@override[/user]
protected void onPreExecute() {
prog = new ProgressDialog(FixWifiActivity.this);
prog.setCancelable(false);
prog.setTitle("Title");
prog.setMessage("Message");
prog.setIndeterminate(true);
prog.show();
}
protected Void doInBackground(Void... params) {
ProcessBuilder pb = new ProcessBuilder(new String[] { "su", "-c", "/system/bin/reboot" });
java.lang.Process process = pb.start();
process.waitFor();
return null;
}
[user=439709]@override[/user]
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
prog.dismiss();
//Progress is dismissed after background task is done
}
AlertDialog alert = builder.create();
alert.show();
}
It has lots of errors
Enviado desde mi Galaxy Mini Plus 4G usando Tapatalk 2
DannyGM16 said:
Why it does not work?
Code:
public void End() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Es necesario reiniciar")
.setTitle("Instalacion satisfactoria!")
.setCancelable(false)
.setNegativeButton("Hacerlo mas tarde",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
})
.setPositiveButton("Reiniciar",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
class MyAsyncTask extends AsyncTask<Void, Void, Void> {
ProgressDialog prog;
[user=439709]@override[/user]
protected void onPreExecute() {
prog = new ProgressDialog(FixWifiActivity.this);
prog.setCancelable(false);
prog.setTitle("Title");
prog.setMessage("Message");
prog.setIndeterminate(true);
prog.show();
}
protected Void doInBackground(Void... params) {
ProcessBuilder pb = new ProcessBuilder(new String[] { "su", "-c", "/system/bin/reboot" });
java.lang.Process process = pb.start();
process.waitFor();
return null;
}
[user=439709]@override[/user]
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
prog.dismiss();
//Progress is dismissed after background task is done
}
AlertDialog alert = builder.create();
alert.show();
}
It has lots of errors
Enviado desde mi Galaxy Mini Plus 4G usando Tapatalk 2
Click to expand...
Click to collapse
The ide will say of unimplemented method. Just highlight it and add unimplemented method and delete tye auto generated method. It will work then
Sent from my GT-N7000 using xda app-developers app
vijai2011 said:
The ide will say of unimplemented method. Just highlight it and add unimplemented method and delete tye auto generated method. It will work then
Sent from my GT-N7000 using xda app-developers app
Click to expand...
Click to collapse
Sorry, I'm Spanish, be more specific, with examples or something like this... I don't understand you
Enviado desde mi Galaxy Mini Plus 4G usando Tapatalk 2
DannyGM16 said:
Sorry, I'm Spanish, be more specific, with examples or something like this... I don't understand you
Enviado desde mi Galaxy Mini Plus 4G usando Tapatalk 2
Click to expand...
Click to collapse
Take you mouse pointer over AsyncTask which would be underlined in red and click on "Add unimplemented method" or something like that. Then delete the methods having the comment "// TODO Auto-generated method stub". Then the error would be gone.
vijai2011 said:
Take you mouse pointer over AsyncTask which would be underlined in red and click on "Add unimplemented method" or something like that. Then delete the methods having the comment "// TODO Auto-generated method stub". Then the error would be gone.
Click to expand...
Click to collapse
I'm developing with my mobile xD
Enviado desde mi Galaxy Mini Plus 4G usando Tapatalk 2
vijai2011 said:
Take you mouse pointer over AsyncTask which would be underlined in red and click on "Add unimplemented method" or something like that. Then delete the methods having the comment "// TODO Auto-generated method stub". Then the error would be gone.
Click to expand...
Click to collapse
Please, can you give me the code?
Enviado desde mi Galaxy Mini Plus 4G usando Tapatalk 2
DannyGM16 said:
I'm developing with my mobile xD
Enviado desde mi Galaxy Mini Plus 4G usando Tapatalk 2
Click to expand...
Click to collapse
With AIDE? Long-click on the code with the red mark below. Then click the first entry (something like "fix"). Select "add unimplemented methods".
That's it.
nikwen said:
With AIDE? Long-click on the code with the red mark below. Then click the first entry (something like "fix"). Select "add unimplemented methods".
That's it.
Click to expand...
Click to collapse
FU** It doesn't appear :'(
Enviado desde mi Galaxy Mini Plus 4G usando Tapatalk 2
nikwen said:
With AIDE? Long-click on the code with the red mark below. Then click the first entry (something like "fix"). Select "add unimplemented methods".
That's it.
Click to expand...
Click to collapse
Code:
public void onClick(DialogInterface dialog, int id) {}
// metodo que se debe implementar
private class PlantFiles extends AsyncTask {
protected Boolean doInBackground(Void... arg0) {
try
{
comando();
}
catch (InterruptedException e)
{}
catch (IOException e)
{}
return null;
}
private void comando() throws IOException, InterruptedException
{
ProcessBuilder pb = new ProcessBuilder(new String[] { "su", "-c", "/system/bin/reboot" });
java.lang.Process process = pb.start();
process.waitFor();
}
protected void onPostExecute(Boolean result){
pd.cancel();
}
protected void onPreExecute(Boolean result){
pd = ProgressDialog.show(FixWifiActivity.this, "Wait", "Loading...", true);
}
}});
AlertDialog alert = builder.create();
alert.show();
}
}
The code is correct but It doesn't work, can you fix it?
Enviado desde mi Galaxy Mini Plus 4G usando Tapatalk 2
I upgraded android studio to .27 and now I get this error when building my app:
Gradle: A problem occurred evaluating root project 'BeerPortfolioPro'.
> Gradle version 1.6 is required. Current version is 1.8-20130730220035+0000
My dependency looks like this:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
[LIBRARY][GUIDE] DynamicShareActionProvider
Some time ago I had a conversation with @SimplicityApks about Google's ShareActionProvider. We found out that it's not flexible enough as it doesn't allow dynamic generation of the data which should be shared.
So here I release my open-source DynamicShareActionProvider library. Its code can be found on Github.
The differences:
Sharing is done dynamically now!
This means that your app specifies the type of the shared data first and generates the data when an app is chosen for sharing. No more need to define what to share when the Activity is created. The content can now be set dynamically.
There are two types of listeners so that you can also generate the data in an AsyncTask.
There is no app icon of the most often used app appearing next to the share icon.
Other icons often do not match the app theme.
The shown app list is not limited to three apps and a "See all" entry first.
Why should the user not see all apps for that action?
You can adjust/must set the icon manually.
Don't worry.
Screenshots:
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
(The second screenshot is from the app FunctionCapture by @SimplicityApks)
Big thanks to:
@SimplicityApks for some ideas
This was featured on the XDA portal on December 20, 2013.
[GUIDE] Adding this to your app
As indicated in the first post, the implementation is a little bit different than with Google's ShareActionProvider.
I assume that you are using Google's ActionBarCompat library.
Add the ActionBarCompat and the DynamicShareActionProvider library to your project first.
Afterwards, there are two ways of sharing your data using the DynamicShareActionProvider:
You can pass the data to the library when an app is selected and it will do the sharing part.
Or the library gives you an Intent which you just need to add the data to. This allows using an AsyncTask for data generation.
Adding the provider to the menu file
The first steps are the same for both ways. Add this to your menu resource file:
Code:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:library="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_item_share"
library:showAsAction="always"
android:title="Share"
android:icon="@drawable/abc_ic_menu_share_holo_dark"
library:actionProviderClass="de.nikwen.dynamicshareactionprovider.library.DynamicShareActionProvider" />
<!-- Your other entries here -->
</menu>
I saved the menu file as "res/menu/main.xml".
What's different from Google's Provider here, is that you need to set the icon for the menu entry. That shouldn't be a problem though because we can use the one from the ActionBarCompat library.
Then inflate the menu resource in the onCreateOptionsMenu() method of your Activity and get the provider from the menu:
Code:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
DynamicShareActionProvider provider = (DynamicShareActionProvider) MenuItemCompat.getActionProvider(menu.findItem(R.id.menu_item_share));
return true;
}
Set the data type
To be able to filter your installed apps for those that can handle the data which should be shared, the provider needs to know which type of data you want to share. Set it like this:
Code:
provider.setShareDataType("text/plain");
(Add this to your onCreateOptionsMenu() method.)
Two different types of listeners
Now you need to choose the way you want to do the sharing:
If the generation of the data which should be shared takes much time so that you want to use an AsyncTask or a Service for that, use the DynamicShareActionProvider.OnShareLaterListener.
Otherwise use the DynamicShareActionProvider.OnShareIntentUpdateListener.
Click to expand...
Click to collapse
Using the OnShareIntentUpdateListener - Let the library do the sharing for you
Set the listener using the setOnShareIntentUpdateListener() method:
Code:
provider.setOnShareIntentUpdateListener(new DynamicShareActionProvider.OnShareIntentUpdateListener() {
@Override
public Bundle onShareIntentExtrasUpdate() {
Bundle extras = new Bundle();
//Generate your data here and add it to the Bundle
return extras;
}
});
(Add this to your onCreateOptionsMenu() method as well.)
We override the onShareIntentExtrasUpdate() method here and pass a Bundle as the return value. The data you add to the bundle should have the same format that you would use, if you added it to the Intent directly using the Intent#putExtras(Bundle extras) method (that's what is used internally).
This is an example for passing the data from an EditText:
Code:
@Override
public Bundle onShareIntentExtrasUpdate() {
Bundle extras = new Bundle();
EditText shareEdit = (EditText) findViewById(R.id.share_edit);
extras.putString(android.content.Intent.EXTRA_TEXT, shareEdit.getText().toString());
return extras;
}
You're done.
Using the OnShareLaterListener - Do the sharing yourself
This time we override the onShareClick() method of the OnShareLaterListener:
Code:
provider.setOnShareLaterListener(new DynamicShareActionProvider.OnShareLaterListener() {
@Override
public void onShareClick(Intent shareIntent) {
MyShareAsyncTask task = new MyShareAsyncTask();
task.execute(shareIntent);
}
});
We get the share Intent as an argument and don't have to pass a return value. Instead, we have to do the sharing part manually.
The example code uses an AsyncTask for that:
Code:
private class MyShareAsyncTask extends AsyncTask<Intent, Void, Intent> {
@Override
protected void onPreExecute() {
Toast.makeText(MainActivity.this, R.string.asynctask, Toast.LENGTH_LONG).show();
}
@Override
protected Intent doInBackground(Intent... intents) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
EditText shareEdit = (EditText) findViewById(R.id.share_edit);
intents[0].putExtra(android.content.Intent.EXTRA_TEXT, "Shared from an AsyncTask: " + shareEdit.getText().toString());
return intents[0];
}
@Override
protected void onPostExecute(Intent intent) {
startActivity(intent);
}
}
However, you're free to do it the way you like.
You're done.
Get the sample code
It's on Github: Link to the sample code
Other stuff
See (and maybe share) my Google Plus post on the library.
Let me know if you add this to your app. I will really appreciate it.
Well, it's time to say thank you again^^, without your lib sharing in my app wouldn't be nearly as useful... Thanks soo much! :good:
SimplicityApks said:
Well, it's time to say thank you again^^, without your lib sharing in my app wouldn't be nearly as useful... Thanks soo much! :good:
Click to expand...
Click to collapse
Thank you very much for the compliments.
And welcome.
It's among the top trending Java repos on Github today. Currently, it's at position #14.
Screenshot:
(I know that the screenshot still shows #16. Old one. )
EDIT: The best I saw was position #11.
Hey congrats for the portal post about ur lib
:good:
---------------------------------
Phone : Samsung Galaxy Mini S5570
OS:
•AOSP ICS Touchwiz V5 by A_U
•Android 4.0.4
•Baseband XWKS2
•Kernel: 2.6.37.6 Badass v1.9 by alin.p
•Recovery CWM v4.0.0.5
Mods:
PureAudio, Mounts2SD, ODEX through Universal ODEX script, AdBlock by AdAway
---------------------------------
Gesendet von Tapatalk
Very nice for us devs! Thanks, I will look where to implement this
Masrepus said:
Hey congrats for the portal post about ur lib
:good:
---------------------------------
Phone : Samsung Galaxy Mini S5570
OS:
•AOSP ICS Touchwiz V5 by A_U
•Android 4.0.4
•Baseband XWKS2
•Kernel: 2.6.37.6 Badass v1.9 by alin.p
•Recovery CWM v4.0.0.5
Mods:
PureAudio, Mounts2SD, ODEX through Universal ODEX script, AdBlock by AdAway
---------------------------------
Gesendet von Tapatalk
Click to expand...
Click to collapse
lesiki said:
Very nice for us devs! Thanks, I will look where to implement this
Click to expand...
Click to collapse
Big thanks to both of you.
Just pushed an update to the library which adds support for ActionBarSherlock and the native ActionBar. I haven't changed the readme-file yet as I'm currently looking for someone to test those versions in his app. Would be great if someone (maybe you?) did it.
If you're interested in the update, have a look at the issue on Github: Issue #2
@nikwen
Great work there !
Sent from my GT-S5302 using Tapatalk 2
sak-venom1997 said:
@nikwen
Great work there !
Sent from my GT-S5302 using Tapatalk 2
Click to expand...
Click to collapse
Thanks.
How can i prevent default action?
i want to override action for facebook.
Hi,
I'm a newbie developer and I thought that I want to add the ability to edit tags in music files (id3 tags),but I have no idea how to do that. Could somebody point me to a guide or explain me how that could be done? With parts of code if possible please.
Thanks.
Wysłane z mojego C6903 przy użyciu Tapatalka
olokos said:
Hi,
I'm a newbie developer and I thought that I want to add the ability to edit tags in music files (id3 tags),but I have no idea how to do that. Could somebody point me to a guide or explain me how that could be done? With parts of code if possible please.
Thanks.
Wysłane z mojego C6903 przy użyciu Tapatalka
Click to expand...
Click to collapse
You have to download this file: https://sites.google.com/site/eternalsandbox/myid3-for-android
Then, add it to your project as reference.
The code is this: (pathdata) is the path of your audio file
Code:
File src = new File(pathdata);
MusicMetadataSet src_set = null;
try {
src_set = new MyID3().read(src);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} // read metadata
if (src_set == null) // perhaps no metadata
{
Log.i("NULL", "NULL");
}
else
{
try{
IMusicMetadata metadata = src_set.getSimplified();
String artist = metadata.getArtist();
String album = metadata.getAlbum();
String song_title = metadata.getSongTitle();
Number track_number = metadata.getTrackNumber();
Log.i("artist", artist);
Log.i("album", album);
}catch (Exception e) {
e.printStackTrace();
}
File dst = new File(pathdata);
MusicMetadata meta = new MusicMetadata("name");
meta.setAlbum("Chirag");
meta.setArtist("CS");
try {
new MyID3().write(src, dst, src_set, meta);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ID3WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // write updated metadata
Hope it's useful!
Jeeko said:
You have to download this file: https://sites.google.com/site/eternalsandbox/myid3-for-android
Then, add it to your project as reference.
The code is this: (pathdata) is the path of your audio file
Code:
File src = new File(pathdata);
MusicMetadataSet src_set = null;
try {
src_set = new MyID3().read(src);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} // read metadata
if (src_set == null) // perhaps no metadata
{
Log.i("NULL", "NULL");
}
else
{
try{
IMusicMetadata metadata = src_set.getSimplified();
String artist = metadata.getArtist();
String album = metadata.getAlbum();
String song_title = metadata.getSongTitle();
Number track_number = metadata.getTrackNumber();
Log.i("artist", artist);
Log.i("album", album);
}catch (Exception e) {
e.printStackTrace();
}
File dst = new File(pathdata);
MusicMetadata meta = new MusicMetadata("name");
meta.setAlbum("Chirag");
meta.setArtist("CS");
try {
new MyID3().write(src, dst, src_set, meta);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ID3WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // write updated metadata
Hope it's useful!
Click to expand...
Click to collapse
Thank you mate.
I can't find in this code a popup with sth like "type in the Artist" etc...
What do I have to do with the pathname?
How do I entirely implement it in my music player?
I'm still a newb, excuse me that.
olokos said:
Thank you mate.
I can't find in this code a popup with sth like "type in the Artist" etc...
What do I have to do with the pathname?
How do I entirely implement it in my music player?
I'm still a newb, excuse me that.
Click to expand...
Click to collapse
This link can be very useful https://java.net/projects/jaudiotagger/
Anyway, you have to implement this code into your "audio editing" activity,
basically the one that have the show.audioinfo function.
The popup is already included in the library, you have only to call that
with a code lik this
Code:
Mp3File mp3file = new Mp3File("SomeMp3File.mp3");
ID3v1 id3v1Tag;
if (mp3file.hasId3v1Tag()) {
id3v1Tag = mp3file.getId3v1Tag();
} else {
// mp3 does not have an ID3v1 tag, let's create one..
id3v1Tag = new ID3v1Tag();
mp3file.setId3v1Tag(id3v1Tag);
}
id3v1Tag.setTrack("5");
id3v1Tag.setArtist("An Artist");
id3v1Tag.setTitle("The Title");
id3v1Tag.setAlbum("The Album");
id3v1Tag.setYear("2001");
id3v1Tag.setGenre(12);
id3v1Tag.setComment("Some comment");
mp3file.save("MyMp3File.mp3");
Want some real confirm? https://github.com/mpatric/mp3agic this is the ID3 guru
Thanks. After I finish something else I'll post here again if I'd have any further questions.
Wysłane z mojego C6903 przy użyciu Tapatalka