android广播里怎么实现Intent页面跳转 广播接收到信息就跳转

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android广播里怎么实现Intent页面跳转 广播接收到信息就跳转相关的知识,希望对你有一定的参考价值。

public class myActivity extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
// TODO Auto-generated method stub
///这里要怎么写


我有写了一个内部类,广播是接收到了,为什么不会运行SystemUpdate 内部类呢??
public class myActivity extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
// TODO Auto-generated method stub
///这里要怎么写
System.out.println("运行了没");

class SystemUpdate extends Activity
@Override
protected void onCreate(Bundle savedInstanceState)
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
System.out.println("运行了没2");
Intent intent=new Intent(this,SystemUpdateInstallDialog.class);
startActivity(intent);



android广播机制指的是,在一个应用程序运行的时候可以自定义一个消息类型,让相应的接收器去处理这个消息或者是系统消息,比如来电话了、来短信了、手机没电了等等系统发送的消息。系统发送的消息也可以通过广播的方式通知给应用程序,这样子就避免了新开一个Thread去监听系统或其他应用发送过来的消息的状态。

Android广播的分类:
1、 普通广播:这种广播可以依次传递给各个处理器去处理
2、 有序广播:这种广播在处理器端的处理顺序是按照处理器的不同优先级来区分的,高优先级的处理器会优先截获这个消息,并且可以将这个消息删除
3、 粘性消息:粘性消息在发送后就一直存在于系统的消息容器里面,等待对应的处理器去处理,如果暂时没有处理器处理这个消息则一直在消息容器里面处于等待状态。
注意:普通广播和粘性消息不同被截获,而有序广播是可以被截获的

处理器的注册:
1、 在代码中用函数代码动态的方式注册。动态注册的处理器必须用代码动态的销毁,每次用来处理消息的就一个实例对象
2、 在配置文件里面静态注册,静态注册有个特点,那就是一旦注册就会一直存在于系统里面,无论应用是否关闭或开关机。(简直就是一个流氓软件病毒啊~)。静态注册每次有处理消息就由系统new一个处理器处理,并销毁
下面具体看看Android广播消息的发送、注册、处理过程:
① 自定义处理器类:

public class MyBroadcastReceiver4 extends BroadcastReceiver
public MyBroadcastReceiver4()
System.out.println("创建了一个由registerReceiver()注册的广播接收器");


@Override
public void onReceive(Context context, Intent intent)
String action = intent.getAction();
System.out.println("MyBroadcastReceiver4收到了一个" + action + "消息");
if (isOrderedBroadcast())
System.out.println("这是一个有序广播,已经被拦截了。");
this.abortBroadcast();
else
System.out.println("这不是一个有序广播");


Bundle bundle = intent.getExtras();
if (bundle != null)
System.out.println("该消息携带的数据如下:");
// 获得bundle的一个key的集合
Set set = bundle.keySet();
// 获得上述集合的迭代器
Iterator iterator = set.iterator();
// 用迭代器遍历集合
while (iterator.hasNext())
// 取得集合中的一个内容
String str = (String) iterator.next();
// 取得Bundle中的内容
System.out.println(str + "--->" + bundle.get(str));

else
System.out.println("该消息没有携带数据");


Toast toast = Toast.makeText(context, "MyBroadcastReceiver4收到了一个"
+ action + "消息", Toast.LENGTH_LONG);
toast.show();
//将这个消息截获(从消息容器移除)这样其他处理器就没法接收到这个消息
this.abortBroadcast();


而界面的转跳
Intent intent = new Intent(context,目标Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent );

提示: context 是在广播接收者的
public void onReceive(Context context, Intent intent) 方法中获取的
参考技术A 上面的采纳回答是不对的,两位都没弄明白问题出在哪里,不用那么麻烦直接将跳转的intent添加一个方法:
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
然后使用广播的context调用startactivity(intent);就可以了;
记住一点 , 凡是广播去调用一个新的Activity加这句。
参考技术B 什么是页面跳转?新的Activity?

Intent intent = new Intent(this, NewActivity.class);
startActivity(intent);

这样就行了,就跳到NewActivity了。追问

这我知道,问题是我是从广播开始跳的,我继承的是BroadcastReceiver ,没有startActivity这个方法

追答

内部类会写不?通过内部类实现。

public class Main extends Activity

@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


class MyBroadcast extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
Intent intent = new Intent(getApplicationContext(), NewActivity.class);
startActivity(intent);





你的内部类怎么能那样写啊。反过来,外面是Acitivity,里面是广播。

追问

如果在activity里写广播的话,activity关了广播也会关呀,这样我功能就实现不了啦,还有别的办法吗?

追答

你是想实现什么功能?同一个广播在任何Activity界面都能够运行,并接收?

把广播写在Service里,后台运行吧,这样你任何时候都能接收到广播。

追问

我有二个应用,一个发送,一个接收,接收的应用没有运行的,呀,,都不知道怎么说了,哥们能加下QQ不185331126

追答

我这里不让上QQ,你写在service里就没有这些问题了。后台任何时候都可以接收广播。

追问

你意思是接收到广播后启运service,service在启运应用,这样吧?因为这应用不是我们的,要写service不点麻烦,还有别的办法吗??

追答

在一个应用里面启动另外一个应用:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);

其中的className就是你另外一个应用的主Activity,你自己写的,应该知道名字吧。

应用A,里面有个广播,接收到消息后。启动应用B,用上面的代码。
不知道你要的是不是这个效果。

追问

这个不能,因为还有别的参数要转过去,

追答

哪个应用不是你们的?至少有一个是你们写的吧?
A?B?发送应用,还是接收应用是你们的?

追问

你说的这个方法还是要通过service吧?

追答

也可以不用啊。Activity里面写个内部类广播,你在广播里面就可以启动另外一个应用。
最通用的方法肯定是写Service了。想怎么调用都可以。

追问

实在不行也只能用service了

本回答被提问者采纳

android接受不到开机广播

manifast里注册 和 但是在BootReceiver中接受不到广播 @Override public void onReceive(Context context, Intent intent) Log.i("TAG", "系统启动完毕"); 这是怎么回事,代码有问题么?

参考技术A intent
判断
intent.getAction()是否与
android.intent.action.BOOT_COMPLETED
相同,发出的是这个,你没监听这个Action

另外注意的是,如果是
3.1以下的系统,没问题。3.1以上的系统,需要有Activity存在,并且启动一次程序,才能够实现广播。
参考技术B android4.0以后就禁用了第三方APP的开机广播,只有系统应用才能收到开机广播。官网文档就这么说的。还有就是第三方APP必须要启动过一次才能接收到,如果你的app没有任何界面,只是在后台启动一个服务,google会认为是流氓软件,禁止启用开机广播。

以上是关于android广播里怎么实现Intent页面跳转 广播接收到信息就跳转的主要内容,如果未能解决你的问题,请参考以下文章

Android搞事篇——使用Intent跳转界面

android接受不到开机广播

Android使用Intent实现页面跳转

Android Studio 使用Intent实现页面的跳转(带参数)

怎样做点击推送消息,跳转到指定页面

安卓:Intent实现页面跳转传输数据