触发BroadcastReceiver的,当我点击按钮当我、按钮、BroadcastReceiver

2023-09-04 23:11:41 作者:冷訫

我想recive的BroadcastReceiver当我点击的main.xml按钮

  ** mainfest.xml **
<应用
    机器人:图标=@可绘制/ ic_launcher
    机器人:标签=@字符串/ APP_NAME
    机器人:主题=@风格/ AppTheme>
    <活动
        机器人:名称=。MainActivity
        机器人:标签=@字符串/ title_activity_main>
        <意向滤光器>
            <作用机器人:名称=android.intent.action.MAIN/>

            <类机器人:名称=android.intent.category.LAUNCHER/>
        &所述; /意图滤光器>
    < /活性GT;
    <接收机器人:名称=。boardCast>

        <意向滤光器>
            <作用机器人:名称=borad.cast/>
              <类机器人:名称=android.intent.category.DEFAULT/>
        &所述; /意图滤光器>
    < /接收器>

< /用途>
 

上面的清单文件接收器与我们自己的行动,比如android.action注册=broad.cast

  ** mainActivty.java **
@覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);
    按钮球¢=(按钮)findViewById(R.id.button1);
    samll.setOnClickListener(新OnClickListener(){

        公共无效的onClick(视图v){
            // TODO自动生成方法存根
            意图II =新的意图(getApplicationContext(),boardCast.class);
            PendingIntent页= PendingIntent.getBroadcast(getApplicationContext(),0,二,0);

        }
    });
}
 

以上Activty类cantain按钮,当我点击该按钮的BroadcastReceiver应触发                          boardcast.java

  @覆盖
公共无效的onReceive(上下文的背景下,意图意图){
    // TODO自动生成方法存根
    如果(intent.getAction()。等于(borad.cast)){
    Toast.makeText(背景下,样品,Toast.LENGTH_LONG).show();
    }
}
 
android的BroadcastReceiver组件

解决方案

摆脱挂起的意图,并做到这一点是这样的:

上的onclick您的按钮的点击事件调用:

 公共无效的onClick(视图v){
            // TODO自动生成方法存根
           broadcastMsg(borad.cast);

        }
    });
 

//这里是函数的定义:

 公共无效broadcastMsg(字符串intentName){
        最终意向意图=新的意图(intentName);
        sendBroadcast(意向);
    }
 

I am trying to recive BroadcastReceiver when i click button on main.xml

                       **mainfest.xml**
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <receiver android:name=".boardCast">

        <intent-filter>
            <action android:name="borad.cast"/>
              <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>

</application>

above manifest file receiver Register with our own action like android.action= "broad.cast"

                             **mainActivty.java**
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button samll = (Button)findViewById(R.id.button1);
    samll.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent ii = new Intent(getApplicationContext(),boardCast.class);
            PendingIntent pp = PendingIntent.getBroadcast(getApplicationContext(), 0, ii, 0);

        }
    });
}

above Activty class cantain button and when i click that button BroadcastReceiver should trigger boardcast.java

     @Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    if(intent.getAction().equals("borad.cast")){
    Toast.makeText(context, "sample", Toast.LENGTH_LONG).show();
    }
}

解决方案

get rid of the pending intent and do it this way:

on the onclick for your button's click event call:

 public void onClick(View v) {
            // TODO Auto-generated method stub
           broadcastMsg("borad.cast");

        }
    });

// and here is the function definition:

public void broadcastMsg(String intentName) {
        final Intent intent = new Intent(intentName);
        sendBroadcast(intent);
    }