简单的Android广播不显示吐司

时间:2011-10-14 16:24:47

标签: 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("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>

屏幕显示在我的Xoom上,但是没有显示吐司。 Xoom通过USB连接,因此它应显示toast /

3 个答案:

答案 0 :(得分:2)

您无法从 a BroadcastReceiver中启动对话框(并且不应启动Toast)。而是让BroadcastReceiver启动另一个组件(活动/服务等)来做某事。要显示Toast,只需创建另一个Activity并调用它,或者在当前显示该Activity的{​​{1}}上创建一个方法并调用它。接收器的整个想法是你尽可能少地在onReceive内做出来,然后离开,接线,这不是你工作的地方。

BroadcastReceiver JavaDoc

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

您无法在onReceive()的实施中启动弹出式对话框

答案 1 :(得分:0)

试试这个吐司功能:

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

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

答案 2 :(得分:0)

Android操作系统没有播放此类事件,因此您的接收器不会收到任何内容并且不会显示吐司。当设备插入或拔出USB设备时,我花了很多时间试图抓住一些东西,但似乎没有广播这些动作。