به اشتراک گذاری فایل از پوشه raw ، assets و ... (راهنما)
سلام ...
من چند وقت پیش دنبال راه حلی می گشتم که بتونم فایل های صوتی رو از پوشه raw یا assets کپی کنم ...
چند بار تاپیک زدم (مثل این و این)، همچنین در اینجا و stackoverflow و کلا در گوگل جستجو کردم ... ولی اون موقع به نتیجه مطلوبم نرسیدم ... (هرچند الان هم خیلی مطلوب نیست :D )
اما بلاخره تکه کدی رو پیدا کردم که حد اقل در همه شرایط کار میکنه و فایل ها رو ارسال میکنه! پس گفتم به اشتراک بذارم!
البته پیش از هر چیزی بگم که این کد اول یک کپی از فایل در sd میگیره و بعد اونو میفرسته ... که میتونید بعد از ارسال فایل رو هم پاک کنید. (دلیل مطلوب نبودن هم همینه!)
این هم کد:
public void sendmp3(int paramInt)
{
byte[] arrayOfByte = (byte[]) null;
InputStream localInputStream = getBaseContext().getResources().openRawResource(paramInt);
try
{
arrayOfByte = new byte[localInputStream.available()];
localInputStream.read(arrayOfByte);
localInputStream.close();
if ( !new File("/sdcard/my_app/").exists())
new File("/sdcard/my_app/").mkdirs();
try
{
FileOutputStream localFileOutputStream = new FileOutputStream("/sdcard/my_app/" + "sound.mp3");
localFileOutputStream.write(arrayOfByte);
localFileOutputStream.flush();
localFileOutputStream.close();
sendBroadcast(new Intent("android.intent.action.MEDIA_SCANNER_SCAN_FILE",
Uri.parse("file://" + "/sdcard/my_app/" + "sound.mp3")));
File newfile = new File("/sdcard/my_app/", "sound.mp3");
String str = MimeTypeMap.getSingleton()
.getMimeTypeFromExtension(newfile.getName()
.substring(1 + newfile.getName().lastIndexOf(".")));
Intent localIntent = new Intent("android.intent.action.SEND");
localIntent.setType(str);
localIntent.putExtra("android.intent.extra.STREAM", Uri.fromFile(newfile));
startActivity(Intent.createChooser(localIntent, "Share using"));
}
catch (IOException e)
{
e.printStackTrace();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
و به این شکل میشه فراخوانی کرد:
sendmp3(R.raw.running);
سلام
در فراخوانیش مشکل بوجود امد
running که نوشتین چیه؟
من یه لیست ویو از موسیقی دارم و میخوام از متد شما استفاده کنم.باید چکار کنم؟میخوام روی هر ایتمی که نگه میداره اهنگ اون ایتم رو به اشتراک بگذاره.
ممنون
mainList.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(final AdapterView<?> p, View v,
final int po, long id) {
return true;
}
});
با سلام برای پخش فایل صوتی از پوشه raw نیازی به کپی آن در SD CARD نیست.
من از کلاس زیر استفاده میکنم که قسمت های مختلفش رو داخل کد توضیح دادم :
public class MusicManager {
private MediaPlayer player;
private boolean keepMusicOn;
private boolean keepLooping;
private int soundId;
private String soundFileName;
//پخش فایل صوتی
public void playMusic(Context context, String fileName) {
player = null;
soundFileName = fileName.replace(" ", "").replace("\n", "");
soundId = G.context.getResources().getIdentifier(soundFileName, "raw", G.context.getPackageName());
if (player == null) {
player = MediaPlayer.create(context, soundId);
player.setLooping(keepLooping);
try {
player.prepare();
}
catch (IllegalStateException e) {}
catch (IOException e) {}
}
if ( !player.isPlaying()) {
player.start();
}
keepMusicOn = false;
}
//متوقف کردن پخش به طوری که قابلیت ادامه دارد
public void keepMusicOn() {
keepMusicOn = true;
}
public void pauseMusic() {
if (player != null) {
if ( !keepMusicOn) {
player.pause();
}
}
}
//متوقف کردن پخش به طوری که قابلیت ادامه ندارد
public void resetMusic() {
if (player != null) {
player.reset();
}
}
//ادامه پخش
public void resumMusic() {
if (player != null) {
try {
player.prepare();
}
catch (IllegalStateException e) {}
catch (IOException e) {}
if ( !player.isPlaying()) {
player.start();
}
}
}
//بعد از اتمام موسیقی ،از ابتدا شروع به پخش میکند
public void setLooping(boolean value) {
keepLooping = value;
}
}
که بنا بر نیاز میتونید متدهای اون را تغییر بدید یا به حالت Static تبدیل کنید
هر جا از برنامه که خواستید از کلاس بالا استفاده کنید به این صورت عمل کنید :
MusicManager musicManager = new MusicManager();
musicManager.playMusic(G.context, "نام فایل صوتی شما");
کافی است در تکه کد بالا نام فایل صوتی موجود در پوشه raw رو قرار بدید
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .