如何将数据传递到BroadcastReceiver的?如何将、数据、BroadcastReceiver

2023-09-05 09:57:57 作者:痴守过去

我所要做的就是到我的应用程序将消息发送到数字,传递给BraodcastReceiver ......但到目前为止,无论是我得到空或BroadcastReceiver的只是单纯的崩溃。

这是我的意图的BroadcastReceiver从CreateMessage类...

 意向意图=新的意图();
        束束=新包();
        bundle.putString(PHN,PHONENO);
        intent.putExtras(包);
        startActivity(意向);
 

和中的BroadcastReceiver(SmsReceiver类),我想抓住的意图这样的..

 公共无效的onReceive(上下文的背景下,意图意图){
    // ---得到通过短信---
    捆绑包= intent.getExtras();
    尝试{
    。// receiveNumbers = intent.getExtras()获得(PHN)的toString();
        串receiveNumbers = intent.getStringExtra(PHN);
        Toast.makeText(上下文,receiveNumbers,Toast.LENGTH_LONG).show();
    }赶上(例外五){
        e.printStackTrace();
    }
 

我的清单文件:

 < XML版本=1.0编码=UTF-8&GT?;
<舱单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
      包=com.AEM_n
      安卓版code =2安卓VERSIONNAME =2.0>
    <使用-SDK安卓的minSdkVersion =8/>
    <使用-权限的Andr​​oid:名称=android.permission.READ_CONTACTS/>
    <使用-权限的Andr​​oid:名称=android.permission.READ_SMS/>
    <使用-权限的Andr​​oid:名称=android.permission.SEND_SMS/>
    <使用-权限的Andr​​oid:名称=android.permission.RECEIVE_SMS/>

    <应用机器人:图标=@可绘制/图标机器人:标签=@字符串/ APP_NAME机器人:可调试=真正的>
        <活动机器人:new_menuNAME =
                  机器人:标签=@字符串/ APP_NAME>
            <意向滤光器>
                <作用机器人:名称=android.intent.action.MAIN/>
                <类机器人:名称=android.intent.category.LAUNCHER/>
            &所述; /意图滤光器>
        < /活性GT;
        <活动
            机器人:标签=@字符串/ APP_NAME
            机器人:SetEvent的NAME =>
            <意向滤光器>
                <作用机器人:名称=com.AEM_n.SETEVENT/>
                <类机器人:名称=android.intent.category.LAUNCHER/>
            &所述; /意图滤光器>
            < /活性GT;
            <活动
            机器人:标签=@字符串/ APP_NAME
            机器人:AddParticipantsNAME = />
            <活动
            机器人:标签=@字符串/ APP_NAME
            CreateMessage:机器人的名字= />
            <活动
            机器人:标签=@字符串/ APP_NAME
            机器人:名称=。DataBaseClass/>
            <活动
            机器人:标签=@字符串/ APP_NAME
            机器人:名称=。IntentReceiver/>
            <活动
            机器人:标签=@字符串/ APP_NAME
            机器人:SmsReceiverNAME =
            />
            <接收器安卓名=机器人SmsReceiver。:出口=真正的>
            <意图过滤器的Andr​​oid版本:优先=999>
            <作用机器人:名称=android.provider.Telephony.SMS_RECEIVED/>
            &所述; /意图滤光器>
            < /接收器>
    < /用途>

< /舱单>
 
学车英语 COMPACT DRIVING TERMINOLOGY

我已经尝试了所有给定的#1的答案......但没有用...

请你们告诉我,我错了...谢谢!

错误日志:

  2月4号至七日:34:02.770:ERROR / AndroidRuntime(25593):致命异常:主要
二月四日至7日:34:02.770:ERROR / AndroidRuntime(25593):java.lang.RuntimeException的错误:接收广播意向{行为= com.myapp.myaction(有群众演员)}在com.AEM_n.SmsReceiver@405a07c8
二月四日至7日:34:02.770:ERROR / AndroidRuntime(25593):在android.app.LoadedApk $ ReceiverDispatcher $ Args.run(LoadedApk.java:722)
二月四日至7日:34:02.770:ERROR / AndroidRuntime(25593):在android.os.Handler.handleCallback(Handler.java:587)
二月四日至7日:34:02.770:ERROR / AndroidRuntime(25593):在android.os.Handler.dispatchMessage(Handler.java:92)
二月四日至7日:34:02.770:ERROR / AndroidRuntime(25593):在android.os.Looper.loop(Looper.java:123)
二月四日至7日:34:02.770:ERROR / AndroidRuntime(25593):在android.app.ActivityThread.main(ActivityThread.java:3701)
二月四日至7日:34:02.770:ERROR / AndroidRuntime(25593):在java.lang.reflect.Method.invokeNative(本机方法)
二月四日至7日:34:02.770:ERROR / AndroidRuntime(25593):在java.lang.reflect.Method.invoke(Method.java:507)
二月四日至7日:34:02.770:ERROR / AndroidRuntime(25593):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:862)
二月四日至7日:34:02.770:ERROR / AndroidRuntime(25593):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
二月四日至7日:34:02.770:ERROR / AndroidRuntime(25593):在dalvik.system.NativeStart.main(本机方法)
二月四日至7日:34:02.770:ERROR / AndroidRuntime(25593):由:显示java.lang.NullPointerException
二月四日至7日:34:02.770:ERROR / AndroidRuntime(25593):在com.AEM_n.SmsReceiver.onReceive(SmsReceiver.java:37)
二月四日至7日:34:02.770:ERROR / AndroidRuntime(25593):在android.app.LoadedApk $ ReceiverDispatcher $ Args.run(LoadedApk.java:709)
二月四日至7日:34:02.770:ERROR / AndroidRuntime(25593):9 ...更多
 

解决方案

随着@Jason的例子......我这样做......

在MainActivity或者您想从

发送意图的任何活动

 意向意图=新的意图(my.action.string);
intent.putExtra(额外,PHONENO); \\ PHONENO是发送号码
sendBroadcast(意向);
 

,然后在我的SmsReceiver类我这样做

 公共无效的onReceive(上下文的背景下,意图意图){
  串动= intent.getAction();

  Log.i(接收器,广播收到:+动作);

  如果(action.equals(my.action.string)){
     字符串状态= intent.getExtras()的getString(额外)。

  }
}
 

和中的manifest.xml我加入my.action.string虽然这是一个选项。

 <接收器安卓名=机器人SmsReceiver。:启用=真正的>
    <意向滤光器>
        <作用机器人:名称=android.provider.Telephony.SMS_RECEIVED/>
        <作用机器人:名称=my.action.string/>
        <! - 和一些动作,如果你想 - >
    &所述; /意图滤光器>
< /接收器>
 

工作就像魅力!

What I am trying to do is that the numbers to which my application sends messages to, are passed to the BraodcastReceiver...but so far either I am getting null or BroadcastReceiver just simply crashes..

here is my intent for BroadcastReceiver from CreateMessage class...

        Intent intent = new Intent();
        Bundle bundle = new Bundle();
        bundle.putString("phN", phoneNo);
        intent.putExtras(bundle);
        startActivity(intent);

And in BroadcastReceiver (SmsReceiver class) I am trying to catch intent like this..

public void onReceive(Context context, Intent intent) {
    //---get the SMS message passed in---
    Bundle bundle = intent.getExtras();
    try{
    //receiveNumbers = intent.getExtras().get("phN").toString();
        String  receiveNumbers = intent.getStringExtra("phN");
        Toast.makeText(context, receiveNumbers, Toast.LENGTH_LONG).show();
    }catch(Exception e){
        e.printStackTrace();
    }

My Manifest File:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.AEM_n"
      android:versionCode="2" android:versionName="2.0">
    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.READ_SMS"/>    
    <uses-permission  android:name="android.permission.SEND_SMS"/>
    <uses-permission  android:name="android.permission.RECEIVE_SMS"/>

    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
        <activity android:name=".new_menu"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:label="@string/app_name"
            android:name=".SetEvent" >
            <intent-filter>
                <action android:name="com.AEM_n.SETEVENT" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            </activity>
            <activity
            android:label="@string/app_name"
            android:name=".AddParticipants" />
            <activity
            android:label="@string/app_name"
            android:name=".CreateMessage" />
            <activity
            android:label="@string/app_name"
            android:name=".DataBaseClass" />
            <activity 
            android:label="@string/app_name"
            android:name=".IntentReceiver"/>
            <activity 
            android:label="@string/app_name"
            android:name=".SmsReceiver"
            />
            <receiver android:name=".SmsReceiver" android:exported="true">
            <intent-filter android:priority="999">
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
            </receiver>
    </application>

</manifest>

I have already tried all the answers given Stackoverflow...But no use...

Please guys tell me where I am going wrong...Thanks!

Error Log:

04-07 02:34:02.770: ERROR/AndroidRuntime(25593): FATAL EXCEPTION: main
04-07 02:34:02.770: ERROR/AndroidRuntime(25593): java.lang.RuntimeException: Error receiving broadcast Intent { act=com.myapp.myaction (has extras) } in com.AEM_n.SmsReceiver@405a07c8
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):     at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:722)
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):     at android.os.Handler.handleCallback(Handler.java:587)
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):     at android.os.Handler.dispatchMessage(Handler.java:92)
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):     at android.os.Looper.loop(Looper.java:123)
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):     at android.app.ActivityThread.main(ActivityThread.java:3701)
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):     at java.lang.reflect.Method.invokeNative(Native Method)
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):     at java.lang.reflect.Method.invoke(Method.java:507)
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862)
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):     at dalvik.system.NativeStart.main(Native Method)
04-07 02:34:02.770: ERROR/AndroidRuntime(25593): Caused by: java.lang.NullPointerException
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):     at com.AEM_n.SmsReceiver.onReceive(SmsReceiver.java:37)
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):     at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:709)
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):     ... 9 more

解决方案

Following @Jason 's example...I did this...

In MainActivity or any activity from where you want to send intent from

Intent intent = new Intent("my.action.string");
intent.putExtra("extra", phoneNo); \\ phoneNo is the sent Number
sendBroadcast(intent);

and then in my SmsReceiver Class I did this

public void onReceive(Context context, Intent intent) {
  String action = intent.getAction();

  Log.i("Receiver", "Broadcast received: " + action);

  if(action.equals("my.action.string")){
     String state = intent.getExtras().getString("extra");

  }
}

And in manifest.xml I added "my.action.string" though it was an option..

<receiver android:name=".SmsReceiver" android:enabled="true">
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        <action android:name="my.action.string" />
        <!-- and some more actions if you want -->
    </intent-filter>
</receiver>

worked like charm!!