내 앱에서 내 앱 사용자가 앱을 쉽게 업그레이드 할 수 있도록 자동 업그레이드 기능을 구현하고 싶습니다. 그렇게하기 위해 syncAdapter (원격 mySQL 서버에서 로컬 SQLite를 업데이트하는 데 이미 사용할 수 있음)를 사용하기로 결정했습니다. 그래서 내 syncAdapter에서 나는 다음과 같이 응용 프로그램 업그레이드를 수행 내 AsyncTask를 클래스에 대한 호출을 만드는 중이라서 :AsyncTask dialogBuilder 오류
public SyncAdapter(Context context, boolean autoInitialize) {
super(context, autoInitialize);
this.context = mContext;
}
@Override
public void onPerformSync(Account account, Bundle extras, String authority,ContentProviderClient provider, SyncResult syncResult) {
Context mcontext = mContext;
new AsyncGetVersiune(mcontext).execute("3", "1");
...
}
그럼 내 AsyncGetVersiune 클래스는이 (업그레이드가 필요한 경우)을 수행합니다
public class AsyncGetVersiune extends AsyncTask<String, Integer, Double> {
private Context mContext;
public AsyncGetVersiune (Context context){
super();
mContext = context;
}
IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
mContext.registerReceiver(downloadReceiver, filter);
final String calex = calea;
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setMessage("There is a newer version available. Upgrade now?")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
//if the user agrees to upgrade
public void onClick(DialogInterface dialog, int id) {
//start downloading the file using the download manager
downloadManager = (DownloadManager) mContext.getSystemService(mContext.DOWNLOAD_SERVICE);
Uri Download_Uri = Uri.parse(calex);
DownloadManager.Request request = new DownloadManager.Request(Download_Uri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);
request.setAllowedOverRoaming(false);
request.setTitle("Download new version");
request.setDestinationInExternalFilesDir(mContext, Environment.DIRECTORY_DOWNLOADS, "Newversion.apk");
downloadReference = downloadManager.enqueue(request);
}
})
.setNegativeButton("Not now", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
builder.create().show();
그러나 DialogBuilder와 관련하여 오류가 발생합니다. 분명히 내 컨텍스트를 좋아하지 않습니다 ...
*"Error parsing data android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application"*
어떻게해야합니까? Dialog inplace를 가지고 싶습니다 ... 그래서 syncAdapter는 AsyncTask 클래스를 사용하여 새 버전을 확인합니다. AsyncTask가 새 버전을 찾으면 onPostExecute에서 대화 상자를 표시하고 거기에서 ... 새 버전의 다운로드 및 설치를 시작합니다.
그러나 syncAdapter에서 업그레이드 프로세스를 시작한 이래로 ... 여기에 얽힌 활동을 ...
그럼 어떻게해야합니까?
AlertDialog를 포기하고 다운로드를 시작하더라도 .... "request.setDestinationInExternalFilesDir (mContext, Environment.DIRECTORY_DOWNLOADS,"Newversion.apk ");"을 호출해야합니다. 내 컨텍스트를 사용합니다. 따라서 AlertDialog 없이도이 오류가 계속 발생합니다. – user1137313
그래서 해결책은 무엇입니까? 이 접근 방식을 사용하지 않습니까? 거기에있는 모든 앱이 어떻게 작동 할 수 있습니까? – user1137313
필요를 더 명확하게 설명하십시오 - 먼저 AlertDialog를 시작하고 AsyncTask를 시작한 후에? 혹은 그 반대로도? 첫 번째 상황에서는 AlyncDialog를 AsyncTask에 배치하면 안됩니다. 이것은 당신의 실수 인 것 같습니다. 대화 상자를 열어 결과를 처리하고 필요한 경우 AsyncTask를 평소와 같이 시작해야합니다. –