gpt4 book ai didi

java - Android BroadcastReceiver 注册时出现空指针异常

转载 作者:行者123 更新时间:2023-12-02 04:25:24 25 4
gpt4 key购买 nike

我正在尝试接收下载完成的操作,但它说广播接收器在注册时为空。
但我查了一下,显然不是。

The LogCat Error

public class UpdateHandler extends Activity{

private DownloadManager manager;

/**
* Class Constructor will only be used for non-static Referencing in a static condition.
*/
public UpdateHandler(DownloadManager dm){
this.manager = dm;
}


public void updateApp(final String appname) {

String apkurl = apk_url + appname;
DownloadManager.Request request = new DownloadManager.Request(
Uri.parse(apkurl));
request.setDescription("Even geduld aub...");
request.setTitle("Bimii-app wordt gedownload");
request.setDestinationInExternalPublicDir(
Environment.DIRECTORY_DOWNLOADS, appname);

File folder1 = android.os.Environment
.getExternalStoragePublicDirectory(android.os.Environment.DIRECTORY_DOWNLOADS
+ "/" + appname);
if (folder1.exists()) {
Log.d("!--->", Environment.DIRECTORY_DOWNLOADS + "/" + appname
+ " pre-existant, delete!");
folder1.delete();
} else {
Log.d("!--->", Environment.DIRECTORY_DOWNLOADS + "/" + appname
+ " is new.");
}

registerBroadcastReceiver(request, appname);
}


/**
* Installing a specific Application by name.
* @param appname
*/
private void installUpdates(String appname) {
Log.d("installing ", appname);
File filepath = android.os.Environment
.getExternalStoragePublicDirectory(android.os.Environment.DIRECTORY_DOWNLOADS
+ "/" + appname);

Intent install_intent = new Intent(Intent.ACTION_VIEW);
install_intent.setDataAndType(Uri.fromFile(filepath),
"application/vnd.android.package-archive");
install_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(install_intent);
}


private void registerBroadcastReceiver(DownloadManager.Request request, final String appname){
// get download service and enqueue file
manager.enqueue(request);

BroadcastReceiver downloadDone = new BroadcastReceiver() {
public void onReceive(Context ctxt, Intent intent) {
Log.d("!--->", "File Download Completed + appname");
installUpdates(appname);
}
};

registerReceiver(downloadDone, new IntentFilter(
DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}
}

这就是我根据请求初始化 UpdateHandler 的方式。这发生在我的家庭 Activity 中。

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

//Initialization
init();

loadApps();
update_handler = new UpdateHandler((DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE));
setupButtons();
loadListView();
}

我正在运行的 Android 版本是 4.2.2,以防万一。

最佳答案

您需要有一个 Activity/应用程序上下文来注册广播接收器。

正如我从屏幕截图中看到的,您正在从 utils.UpdateHandler 文件注册接收器,因此您需要将应用程序上下文传递给此方法。

所以代码将是

/**
* Class Constructor will only be used for non-static Referencing in a static condition.
*/
public UpdateHandler(Context context, DownloadManager dm){
this.mContext = context;
this.manager = dm;
}

然后调用context.registerReceiver()

关于java - Android BroadcastReceiver 注册时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32248123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com