Java 创建并加载活动后如何发送广播
我正在创建一个音乐应用程序。我想从主要活动中发送广播。接受者也在主要活动中。此广播访问创建并显示为片段的Arraylist。每个片段都在寻呼机的视图中。查看寻呼机处于主要活动中 现在的问题是我正在发送广播以访问arraylist,Receiver接收(从主类的oncreate方法发送广播),但arraylist仍然没有创建,因此没有数据存在,因此显示错误。 在生成arraylist并创建片段之后,是否有任何方法可以发送广播Java 创建并加载活动后如何发送广播,java,android,arraylist,Java,Android,Arraylist,我正在创建一个音乐应用程序。我想从主要活动中发送广播。接受者也在主要活动中。此广播访问创建并显示为片段的Arraylist。每个片段都在寻呼机的视图中。查看寻呼机处于主要活动中 现在的问题是我正在发送广播以访问arraylist,Receiver接收(从主类的oncreate方法发送广播),但arraylist仍然没有创建,因此没有数据存在,因此显示错误。 在生成arraylist并创建片段之后,是否有任何方法可以发送广播 public class MainActivity extends Ap
public class MainActivity extends AppCompatActivity implements SeekBar.OnSeekBarChangeListener{
private static int songEnded = 0;
View view;
Intent intent;
int a = 0, b = 0;
int x=0;
String[] path = Kaibee.getInstance().path;
ArrayList<collection> collections;
ArrayList<collection> songlist = Kaibee.getInstance().collections;
ArrayList<collection> fav = fav_collection.getInstance().fav;
TextView bsongname,starttime,endtime;
collectionAdapter collectionadapter=new favorite().mAdapter;
ImageView bsongimage;
int seekProgress;
ImageButton greenplay,favourite;
RelativeLayout songinfo, rl;
LinearLayout bottomll;
View bottomSheet;
FloatingActionButton fb;
MediaPlayer mediaPlayer;
ImageView bnext,bprev,playlist;
favlistdb mydb;
bottomsheetdb bdb;
playerservice ps;
favorite f=new favorite();
private BottomSheetBehavior mBottomSheetBehavior;
private SeekBar seekBar;
private int seekMax;
private Toolbar toolbar;
ActionBarDrawerToggle actionBarDrawerToggle;
DrawerLayout drawerLayout;
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent serviceIntent) {
updateUI(serviceIntent);
}
};
private IntentFilter bfilter = new IntentFilter("songclick");
private IntentFilter filter = new IntentFilter("songc");
// private IntentFilter pfilter = new IntentFilter("bottomsheetbutton");
@Override
protected void onRestart() {
super.onRestart();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(bBroadcastReceiver, bfilter);
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(broadcastReceiver, filter);
ps= new playerservice();
bdb = new bottomsheetdb(this);
Cursor result=bdb.getdata();
if (result != null) {
int pos=0;
String listname = null;
if (result.moveToFirst() ) {
do{
listname = result.getString(result.getColumnIndex(bottomsheetdb.COL_2)) ;
pos =(result.getInt(result.getColumnIndex(String.valueOf(bottomsheetdb.COL_3))));
System.out.println("bottomsheet data "+listname+" "+pos);
Intent minten = new Intent("songclick");
minten.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
minten.putExtra("position",pos);
minten.putExtra("pause","play");
minten.putExtra("collect",listname);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(minten);
ps.setupHandler();
}while(result.moveToNext());
}
}
else{bottomSheet.setVisibility(View.GONE);}
// Create an adapter that knows which fragment should be shown on each page
category_adapter adapter = new category_adapter(this, getSupportFragmentManager());
// Set the adapter onto the view pager
viewPager.setAdapter(adapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
// Connect the tab layout with the view pager. This will
// 1. Update the tab layout when the view pager is swiped
// 2. Update the view pager when a tab is selected
// 3. Set the tab layout's tab names with the view pager's adapter's titles
// by calling onPageTitle()
tabLayout.setupWithViewPager(viewPager);
//setting data inside bottom sheet
try {
Intent serviceIntent = new Intent(this, playerservice.class);
// --- set up seekbar intent for broadcasting new position to service ---
intent = new Intent("seek_update");
seekBar.setOnSeekBarChangeListener(this);
}
catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),
e.getClass().getName() + " " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
}
public BroadcastReceiver bBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context c, Intent i) {
x=0;
String ss=i.getExtras().getString("collect");
if(ss.equals("song_list_fragment")){collections=Kaibee.getInstance().collections;}
else if(ss.equals("album")){collections=song_album_fetch.getInstance().albumsong;}
else if(ss.equals("artist")){collections=artist_songs_fetch.getInstance().artistsong;}
else if(ss.equals("genres")){collections=genres_songs_fetch.getInstance().genresong;
}
else{collections=fav_collection.getInstance().fav;}
a = i.getExtras().getInt("position");
collectionadapter=new collectionAdapter(getApplicationContext(),fav);
// collectionadapter=f.mAdapter;
String s = i.getExtras().getString("pause");
String play = "play", pause = "pause";
if (s.equals(play)) {
greenplay.setImageResource(R.drawable.ic_play_circle_filled);
fb.setImageResource(R.drawable.ic_play_arrow);
} else {
greenplay.setImageResource(R.drawable.ic_pause_circle_outline);
fb.setImageResource(R.drawable.ic_pause);
}
bottomSheet.setVisibility(View.VISIBLE);
}
};
/**
* Dispatch onResume() to fragments. Note that for better inter-operation
* with older versions of the platform, at the point of this call the
* fragments attached to the activity are <em>not</em> resumed. This means
* that in some cases the previous state may still be saved, not allowing
* fragment transactions that modify the state. To correctly interact
* with fragments in their proper state, you should instead override
* {@link #onResumeFragments()}.
*/
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(bBroadcastReceiver);
LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(broadcastReceiver);
}
public类MainActivity扩展AppCompatActivity实现SeekBar.OnSeekBarChangeListener{
私有静态int=0;
视图;
意图;
int a=0,b=0;
int x=0;
String[]path=Kaibee.getInstance().path;
阵列列表集合;
ArrayList songlist=Kaibee.getInstance().collections;
ArrayList fav=fav_collection.getInstance().fav;
TextView bsongname、starttime、endtime;
collectionAdapter collectionAdapter=新收藏夹().mAdapter;
图像视图;
国际搜索进程;
图像按钮绿色游戏,最爱;
RelativeLayout songinfo,rl;
线性布局底部;
查看底板;
浮动操作按钮fb;
媒体播放器;
ImageView bnext、bprev、播放列表;
favlistdb mydb;
下表DB bdb;
playerservice-ps;
favorite f=新收藏夹();
私人银行行为mBottomSheetBehavior;
私人SeekBar SeekBar;
私有int-seekMax;
专用工具栏;
ActionBarDrawerToggle ActionBarDrawerToggle;
抽屉布局抽屉布局;
private BroadcastReceiver BroadcastReceiver=新的BroadcastReceiver(){
@凌驾
公共void onReceive(上下文上下文、意图serviceIntent){
更新(服务意图);
}
};
私有IntentFilter bfilter=新IntentFilter(“歌曲点击”);
私有IntentFilter筛选器=新IntentFilter(“songc”);
//私有IntentFilter pfilter=新IntentFilter(“底部挡板按钮”);
@凌驾
受保护的void onRestart(){
super.onRestart();
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(bBroadcastReceiver,bfilter);
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(broadcastReceiver,filter);
ps=新的playerservice();
bdb=新的底部挡板DB(本);
游标结果=bdb.getdata();
如果(结果!=null){
int pos=0;
字符串listname=null;
if(result.moveToFirst()){
做{
listname=result.getString(result.getColumnIndex(bottomsheetdb.COL_2));
pos=(result.getInt(result.getColumnIndex(String.valueOf(bottomsheetdb.COL_3)));
System.out.println(“底页数据”+listname+“”+pos);
Intent minten=新的Intent(“歌曲点击”);
minten.addFlags(Intent.FLAG包含停止的包);
minten.putExtra(“位置”,位置);
minten.putExtra(“暂停”、“播放”);
minten.putExtra(“collect”,列表名);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(minten);
ps.setupHandler();
}while(result.moveToNext());
}
}
else{bottomSheet.setVisibility(View.GONE);}
//创建一个适配器,它知道应该在每个页面上显示哪个片段
category_adapter adapter=新的category_适配器(这个,getSupportFragmentManager());
//将适配器设置到视图寻呼机上
viewPager.setAdapter(适配器);
TabLayout TabLayout=(TabLayout)findViewById(R.id.tabs);
//将选项卡布局与视图寻呼机连接。这将
//1.在浏览寻呼机时更新选项卡布局
//2.选择选项卡时更新视图寻呼机
//3.使用视图寻呼机适配器的标题设置选项卡布局的选项卡名称
//通过调用onPageTitle()实现
tabLayout.setupWithViewPager(viewPager);
//在底部工作表中设置数据
试一试{
意向服务意向=新意向(此,playerservice.class);
//---设置seekbar意图,以便向服务广播新位置---
意向=新意向(“寻求更新”);
seekBar.setonseekbarchaneglistener(这个);
}
捕获(例外e){
e、 printStackTrace();
Toast.makeText(getApplicationContext(),
e、 getClass().getName()+“”+e.getMessage(),
Toast.LENGTH_LONG).show();
}
}
公共广播接收器bBroadcastReceiver=新广播接收器(){
@凌驾
接收时公共无效(上下文c,意图i){
x=0;
String ss=i.getExtras().getString(“collect”);
if(ss.equals(“歌曲列表片段”){collections=Kaibee.getInstance().collections;}
else if(ss.equals(“album”){collections=song\u album\u fetch.getInstance().albumsong;}
else if(ss.equals(“artist”){collections=artist\u songs\u fetch.getInstance().artistsong;}
else如果(ss.equals(“genres”){collections=genres\u songs\u fetch.getInstance().genresong;
}
else{collections=fav_collection.getInstance().fav;}
a=i.getExtras().getInt(“位置”);
collectionadapter=新的collectionadapter(getApplicationContext(),fav);
//collectionadapter=f.mAdapter;
字符串s=i.getExtras().getString(“暂停”);
字符串play=“play”,pause=“pause”;
如果(s.equals(play)){
greenplay.setImageResource(R.drawable.ic_play_circle_filled);
fb.setImageResource(R.drawable.ic\u play\u箭头);
}否则{
greenplay.setImageResource(R.drawable.ic\u pause\u circle\u outline);
fb.setImageResource(R.drawable.ic_pause);
}
bottomSheet.setVisibility(View.VISIBLE);
}
};
/**
*将onResume()分派给片段。请注意,为了更好地进行交互操作
*使用旧版本
private MyReceiver mMyReceiver;
private class mMyReceiver extends BroadcastReceiver {
Context mContext;
public mMyReceiver(Context context){
mContext = context;
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(YOUR_ACTION)) {
// get data from intent
}
}
}
private void registerReceiver() {
if (mMyReceiver== null) {
mMyReceiver= new MyReceiver(this);
}
IntentFilter intentFilter = new IntentFilter(YOUR_ACTION);
registerReceiver(mMyReceiver, intentFilter);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// others
registerReceiver();
}
@Override
protected void onDestroy() {
if(mMyReceiver != null){
unregisterReceiver(mMyReceiver );
}
super.onDestroy();
}
registerReceiver(myReceiver, new IntentFilter("INTENT_NAME"));
private BroadcastReceiver myReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
}
};
Intent intent = new Intent("INTENT_NAME");
sendBroadcast(intent);