通过活动拨打BroadCast接收方的电话

时间:2011-08-07 15:09:04

标签: android android-activity broadcastreceiver

我是Android开发的新手。我试图从我的活动中发明一个广播接收器。

public class MyReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"ABC", Toast.LENGTH_LONG).show();
        Bundle extras = intent.getExtras();
        String[] parameters= (String[])intent.getSerializableExtra("parameters");
    }
}

我的活动是

public class MyActivity extends Activity {
    public static String BROADCAST_ACTION="com.kiosk.cbal.CALL_RECEIVER";

    /**
     * @see android.app.Activity#onCreate(Bundle)
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String parameters = "safdsam,fdsa,fdsa,fdsa,fdsa";
        String[] parameters =abc.split(",");
        Intent i = new Intent("com.package.MyReceiver");
        i.putExtra("parameters", parameters);
        sendBroadcast(i);
    }
}

我的清单文件是

<?xml version="1.0" encoding="UTF-8"?>
<manifest android:versionCode="1" android:versionName="1.0"
    package="com.package" xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-sdk android:minSdkVersion="7"/>
    <application android:icon="@drawable/icon" android:label="@string/app_name">

        <activity android:label="@string/app_name" android:name="MyActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <receiver android:name="MyReceiver">
            <intent-filter>
                <action android:name="com.kiosk.cbal.CALL_RECEIVER"/>
            </intent-filter>
        </receiver> 

    </application>
    <uses-permission android:name="android.permission.BATTERY_STATS"/>
</manifest>

现在我将如何通过活动给广播接收者打电话?

2 个答案:

答案 0 :(得分:0)

从操作名称中删除空格。在创建意图时使用该名称。

答案 1 :(得分:0)

更新:上面的代码仍有Intent i = new Intent("com.package.MyReceiver");。它应该是Intent i = new Intent("com.kiosk.cbal.CALL_RECEIVER");

同时,在您的清单中,接收者名称被指定为<receiver android:name="MyReceiver">。请注意android:name必须是完全限定的类名或相对于包名的名称。 PackageManager区分两者的方式是在名称的开头存在.。因此,在您的声明中,PackageManager很可能尝试实例化MyReceiver' instead of com.package.MyReceiver`。

在任何情况下,您都应该查看Android日志文件,详细了解您正在播放的意图出了什么问题。


传递给Intent构造函数的字符串必须与清单中接收者的action元素指定的字符串相同。您正在使用您的接收者类名构建Intent,但声明您的接收者正在听取VIEW意图。