当前位置: 首页 > 知识库问答 >
问题:

将mp3文件从资产文件夹共享到Whatsapp Android

公良浩邈
2023-03-14

我是Android的新手。

我已经尝试了这个论坛的所有帖子。但未能取得成功。我正在尝试将mp3文件从asset文件夹共享到whatsapp。

下面是我的代码。

这是我在主活动中的代码:

package com.example.sharedemo;

import com.example.sharedemo.R;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
    Button sharebutton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        sharebutton = (Button) findViewById(R.id.sharebutton1);
        sharebutton.setOnClickListener(new View.OnClickListener() {         
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                Uri theUri = Uri.parse("content://com.example.sharedemo.Assetsprovider/gotShocked.mp3");    
                Intent theIntent = new Intent(Intent.ACTION_SEND);
                theIntent.setType("audio/mp3");
                theIntent.setPackage("com.whatsapp");
                theIntent.putExtra(Intent.EXTRA_STREAM,theUri);
                startActivity(Intent.createChooser(theIntent,"Share using"));
            }
        });
    }
}

ContentProvider中的代码:

package com.example.sharedemo;

import java.io.FileNotFoundException;
import java.io.IOException;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.net.Uri;
import android.util.Log;

public class Assetsprovider extends ContentProvider {
     @Override
     public AssetFileDescriptor openAssetFile( Uri uri, String mode ) throws FileNotFoundException
     {

             AssetManager am = getContext( ).getAssets( );
            String file_name = uri.getLastPathSegment( );
            // String file_name = uri.getPath();

             if( file_name == null )
                     throw new FileNotFoundException( );
             AssetFileDescriptor afd = null;
             try
             {
                     afd = am.openFd(file_name);
             }
             catch(IOException e)
             {
                     e.printStackTrace( );
             }
             return afd;//super.openAssetFile(uri, mode);
     }
     @Override
     public String getType( Uri p1 )
     {
             // TODO: Implement this method
             return null;
     }

     @Override
     public int delete( Uri p1, String p2, String[] p3 )
     {
             // TODO: Implement this method
             return 0;
     }

     @Override
     public Cursor query( Uri p1, String[] p2, String p3, String[] p4, String p5 )
     {
             // TODO: Implement this method
             return null;
     }

    /* @Override
     public Cursor query( Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder, CancellationSignal cancellationSignal )
     {
             // TODO: Implement this method
             return super.query( uri, projection, selection, selectionArgs, sortOrder, cancellationSignal );
     }*/

     @Override
     public Uri insert( Uri p1, ContentValues p2 )
     {
             // TODO: Implement this method
             return null;
     }

     @Override
     public boolean onCreate( )
     {
             // TODO: Implement this method
             return false;
     }

     @Override
     public int update( Uri p1, ContentValues p2, String p3, String[] p4 )
     {
             // TODO: Implement this method
             return 0;
     }
}

清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.sharedemo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="14" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
         <activity
            android:name=".Assetsprovider"
            android:label="@string/app_name" > 
            </activity> 
         <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <provider
        android:name="com.example.sharedemo.Assetsprovider"
        android:authorities="com.example.sharedemo.Assetsprovider"
        android:grantUriPermissions="true"
        android:exported="true" />
    </application>

</manifest>

共有2个答案

司徒浩思
2023-03-14
  InputStream inputStream = getResources().openRawResource(R.raw.some_file);
  File tempFile = File.createTempFile("pre", "suf");
  copyFile(inputStream, new FileOutputStream(tempFile));

  // Now some_file is tempFile .. do what you like
} catch (IOException e) {
  throw new RuntimeException("Can't create temp file ", e);
}

private void copyFile(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024];
    int read;
    while((read = in.read(buffer)) != -1){
      out.write(buffer, 0, read);
    }
}```
周阳成
2023-03-14
   Intent share = new Intent(Intent.ACTION_SEND);
   share.setType("audio/*");
   share.putExtra(Intent.EXTRA_STREAM,Uri.parse("file:///"+mypath));
   startActivity(Intent.createChooser(share, "Share Sound File"));
   break;
 类似资料:
  • 我知道这可能是一个愚蠢的问题,但我对Android开发还不熟悉,经过一个小时的搜索,我找不到该怎么做。我正在尝试开发一个音乐应用程序,我从下面的教程中得到了帮助。 https://www.sitepoint.com/a-step-by-step-guide-to-building-an-android-audio-player-app/ 在本教程中,通过Uri=MediaStore读取mp3文件。

  • 该文件位于我的资产文件夹下。因此,我正在设置WebViewClient并将我的页面加载到其中。但是我得到一个“网页不可用”的错误。 以下是我的活动代码: 和布局文件:

  • 我如何下载到我的笔记本电脑通过终端使用“wget”或python或任何相关的东西。

  • 我想用SharingContent将声音从原始文件夹共享到另一个应用程序 我使用此代码共享文本和字符串

  • 问题内容: 我想在应用程序的第一次运行中将一个很大的目录从我的应用程序的Assets文件夹复制到data文件夹。我怎么做?我已经尝试过一些示例,但是没有用,所以我什么都没有。我的目标是Android 4.2。 谢谢,Yannik 问题答案: 尝试使用您的Application实例的以下代码(您应该在清单中编写该类):该代码将资产/文件文件夹的内容复制到应用程序的缓存文件夹中(您可以将其他路径放在c

  • 我在我的android应用程序中有一个webview,加载的html文件在服务器上,但是我需要从应用程序的资产文件夹地址一些文件。我想问一下如何处理这些文件。 谢谢