Как получить каталог данных или каталог приложения в doBackground AsyncTask - PullRequest
1 голос
/ 09 июля 2019

Я хочу получить каталог приложения (и некоторые специальные предварительно созданные подкаталоги) моего приложения в dobackground моей asyncTask.Я использую Asynctask для отправки электронной почты.и мой класс асинхронной электронной почты не в активности.Я хочу получить определенный файл в каталоге данных приложения и прикрепить его для отправки.в этом разделе у меня нет контекста для получения пути (каталог данных).Цель состоит в том, чтобы получить путь к моему файлу в dobackground моей асинхронной задачи, когда мой класс асинктивной работы находится в отдельном файле (не внутри действия)

Ответы [ 2 ]

2 голосов
/ 09 июля 2019

Полагаю, вы хотите передать параметры асинхронным задачам. Это , вероятно, поможет вам.

1 голос
/ 09 июля 2019

Упрощенный пример:

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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...