如何在AsyncTask的doBackground中获取数据目录或应用程序目录

时间:2019-07-09 06:48:41

标签: android android-asynctask

我想在asyncTask的dobackground中获取我的应用程序的应用程序目录(以及一些特殊的预建子目录)。我正在使用asynctask发送电子邮件。并且我的电子邮件asynctask类不在活动中。我想在应用程序数据目录中获取某个文件,并将其附加以进行发送。在本节中,我没有任何获取路径(数据目录)的上下文。目标是当我的asynctask类位于单独的文件(不在活动内部)时,将文件路径放在asynctask的dobackground中

2 个答案:

答案 0 :(得分:2)

我猜您想将参数传递给asynctasks。 This可能会为您提供帮助。

答案 1 :(得分:1)

简化示例:

public class AsyncTaskMy extends AsyncTask<Void, Void, Void> {

    private WeakReference<Context> contextRef;

    public AsyncTaskMy(Context context) {
        contextRef = new WeakReference<>(context);
    }

    @Override
    protected Void doInBackground(Void... voids) {
        Context context = contextRef.get();
        if (context != null) {
            try {
                PackageManager m = context.getPackageManager();
                String s = context.getPackageName();
                PackageInfo p = m.getPackageInfo(s, 0);
                s = Environment.getExternalStorageDirectory().toString();
                s += p.applicationInfo.dataDir;
                sendFileWithEmail(new File(s));//or whatever you want
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }

            return null;
        }
        return null;
    }

MainActivity.java

    class MainActivity extends AppCompatActivity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            AsyncTaskMy asyncTaskMy = new AsyncTaskMy(this);
            asyncTaskMy.execute();
    }
}