简单的Android广播不显示toast

简单的Android广播不显示toast,android,Android,我只是想在Androids活动中创建一个简单的广播,但它不起作用 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent i = new Intent("andro

我只是想在Androids活动中创建一个简单的广播,但它不起作用

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Intent i = new Intent("android.intent.action.UMS_CONNECTED"); 

    IntentFilter filter = new IntentFilter();
    filter.addAction("android.intent.action.UMS_CONNECTED");

    receiver = new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
          Toast.makeText(getApplicationContext(), "connected", Toast.LENGTH_LONG).show();
      }
    };

    registerReceiver(receiver, filter);


        }
    }
XML

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="usb.usbd"
      android:versionCode="1"
      android:versionName="1.0">
       <uses-feature android:name="android.hardware.usb.host" />
    <uses-sdk android:minSdkVersion="12" />    

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".UsbddActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
             <intent-filter>
      <action android:name="android.intent.action.UMS_CONNECTED" />
      <action android:name="android.intent.action.UMS_DISCONNECTED" />
                        </intent-filter>
        </activity>

    </application>
</manifest>

屏幕显示在my Xoom上,但不显示toast。Xoom是通过USB连接的,因此它应该显示toast/

您不能从内的广播接收器启动对话框(也不应该启动toast)。相反,让
BroadcastReceiver
启动另一个执行某些操作的组件(活动/服务等)。要显示一个
Toast
只需创建另一个
活动
并调用它,或者在当前的
活动
上创建一个方法来显示它并调用它。接收器的整个概念是,你在内部
onReceive
尽可能少地工作,然后出去,这是布线,不是你工作的地方

当BroadcastReceiver接收到意图广播时,调用此方法。在此期间,您可以使用BroadcastReceiver上的其他方法查看/修改当前结果值。该函数通常在其进程的主线程内调用,因此您不应该在其中执行长时间运行的操作(在考虑阻止接收器和杀死候选对象之前,系统允许超时10秒)。无法在onReceive()的实现中启动弹出对话框


在onReceive()的实现中无法启动弹出对话框。

请尝试以下toast功能:

Toast.makeText(getBaseContext(),“connected”,Toast.LENGTH_LONG.show()


我在我的应用程序中也遇到了类似的问题,然后我将getApplicationContext()更改为getBaseContext(),然后它对我有效。

Android操作系统没有广播此类事件,因此你的接收器不会接收任何内容,也不会显示toast。我花了很多时间试图捕捉设备插入usb或从usb拔出时的内容,但这些操作似乎没有广播任何内容

接收器注册看起来没问题,意图看起来没问题。。。但是,实际发送广播的代码在哪里?“不工作”绝对不足以提供足够的信息。嘿,我的车“坏了”,你能从中找出解决办法吗?此外-您的意图i=新意图(“…”);,为什么会有引号?我认为android.intent.action.UMS_CONNECTED是该类中的最后一个常量。杰克,当我从intent I=new intent(“…”)中去掉引号时,Eclipse将其标记为错误的“无法解析为变量”Maximus。这是个好问题。我没有,这可能就是它不起作用的原因。谢谢。@Maximus OS应该发送这些广播,当它没有回答为什么你的接收器不工作时,为什么它被检查为答案?吐司可以从接收器内部调用,所需时间少于一秒钟。只需检查广播接收器是否正常工作即可。@Maxim“您无法在onReceive()的实现中启动弹出对话框”在答案中出现两次。我并没有明确地尝试过这个,所以也许你们说的是,即使不允许使用对话,Toast也可以工作?无论哪种方式,尽管这毫无意义,也不是接收者的目的,但答案是不要这样做(答案提供了实现总体目标的正确方法)。我只提到了Toast,我明确地尝试了Toast,这就是为什么我说它有效。问题是“为什么接收器不显示toast?”作者并没有试图启动一个对话框,我同意这在这里不起作用。如我所述,如果toast有效,则意味着他的接收器应该工作,并且应该显示toast,但它不起作用。它之所以不
t的唯一原因是因为操作系统不为连接的UMS\u和断开的UMS\u发送广播,它们已经被弃用了。这就是为什么没有展示烤面包片的原因。希望这有意义,谢谢。哦,上帝!一本书告诉我在接收器内调用Toast(可能只是想做一些类似控制台日志的事情),我很确定回调函数已经调用,但没有显示Toast,我被绊倒了,所以我搜索stackoverflow。。。那是什么书!