Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 小部件在应用程序崩溃或用户杀死应用程序后停止接收数据?_Android - Fatal编程技术网

Android 小部件在应用程序崩溃或用户杀死应用程序后停止接收数据?

Android 小部件在应用程序崩溃或用户杀死应用程序后停止接收数据?,android,Android,我有一个在服务中播放音乐的应用程序。还有一个控制音乐播放器的小部件。一切正常 现在,在用户关闭应用程序后,或者如果应用程序崩溃,或者如果我使用System.exit()或getActivity().finish()要关闭它,存在一些问题。一切似乎都很正常,但不知何故,小部件不再接收广播,即使另一个活动仍然接收广播 小部件仍然能够发送广播,只是无法接收广播 谁能帮帮我吗 我的小部件中的代码: public void onUpdate(Context context, AppWidgetManage

我有一个在
服务中播放音乐的应用程序
。还有一个控制音乐播放器的小部件。一切正常

现在,在用户关闭应用程序后,或者如果应用程序崩溃,或者如果我使用
System.exit()
getActivity().finish()要关闭它,存在一些问题。一切似乎都很正常,但不知何故,小部件不再接收广播,即使另一个
活动仍然接收广播

小部件仍然能够发送广播,只是无法接收广播

谁能帮帮我吗

我的小部件中的代码:

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

    ma = (GlobalSongList)context.getApplicationContext();

    context.getApplicationContext().registerReceiver(broadcastCoverReceiver, new IntentFilter(Music_service.BROADCAST_COVER));

    context.getApplicationContext().registerReceiver(broadcastPlayPause, new IntentFilter(BROADCAST_PLAYPAUSE));
    context.getApplicationContext().registerReceiver(checkagain, new IntentFilter("xyz"));
    context.getApplicationContext().registerReceiver(intentshuttingdown, new IntentFilter("shutdown"));

    RemoteViews controlButtons = new RemoteViews(context.getPackageName(),R.layout.widget);

    Intent playIntent = new Intent(BROADCAST_PLAYPAUSE);
    PendingIntent playPendingIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, playIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    controlButtons.setOnClickPendingIntent(R.id.bPlay, playPendingIntent);


    Intent previousIntent = new Intent(why);
    PendingIntent previousPendingIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, previousIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    controlButtons.setOnClickPendingIntent(R.id.bprev, previousPendingIntent);

    if(ma.NP_List.size()>0) {
        controlButtons.setTextViewText(R.id.song, ma.NP_List.get(ma.position).song);
        controlButtons.setTextViewText(R.id.artist, ma.NP_List.get(ma.position).getArtist());

        Intent open_activityIntent = new Intent(BROADCAST_open_activity);
        PendingIntent openactivityPendingIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, open_activityIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        controlButtons.setOnClickPendingIntent(R.id.parent, openactivityPendingIntent);

        if(ma.boolMusicPlaying1 == true) {
            controlButtons.setImageViewResource(R.id.bPlay, R.drawable.pause2);
        } else {
            controlButtons.setImageViewResource(R.id.bPlay, R.drawable.play);
        }
    } else if(ma.NP_List.size() == 0) {
        controlButtons.setTextViewText(R.id.song, "");
        controlButtons.setTextViewText(R.id.artist,  "");
    }

    Intent nextIntent     = new Intent(BROADCAST_SWAP);
    nextIntent.putExtra("nextprev", 1);

    PendingIntent nextPendingIntent = PendingIntent.getBroadcast(context, 0, nextIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    controlButtons.setOnClickPendingIntent(R.id.bNext, nextPendingIntent);

    appWidgetManager.updateAppWidget(appWidgetIds, controlButtons);
}

public BroadcastReceiver broadcastCoverReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent serviceIntent) {
        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context.getApplicationContext());
        ComponentName thisWidget = new ComponentName(context.getApplicationContext(), MyWidget.class);
        int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
        if (appWidgetIds != null && appWidgetIds.length > 0) {
            onUpdate(context, appWidgetManager, appWidgetIds);
        }
    }
};

在“活动”中,您应该分别在“恢复”和“暂停”上绑定和解除绑定后台服务


访问了解服务和活动之间的关系

您应该使用android应用程序小部件,而不要使用广播,因为这是最传统的方式……文档中也提到了这一点

我们将发布一些相关代码。没有人能从描述中帮助你,我们也需要看看你做了什么。但是
System.exit()
可能已经是问题所在。切勿使用
System.exit()
。操作系统控制应用程序何时被终止,试图干扰这只会导致问题。我已经编写了“或”这不是唯一的场景……请告诉我应该发布什么代码?所有相关代码、无法按预期工作的部分以及您认为可能重要的所有其他内容。服务代码,小部件代码或启动服务的活动代码?