abh*_*hek 36 android broadcast broadcastreceiver
我有App A和App B.在App中我想向App B发送广播.这是App A的代码:
final Intent intent = new Intent();
intent.setAction("com.pkg.perform.Ruby");
intent.putExtra("KeyName", "code1id");
intent.setComponent(new ComponentName("com.pkg.AppB", "com.pkg.AppB.MainActivity"));
sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)
在App B - In中MainActivity,我有MyBroadCastReceiverClass.
public class MainActivity extends Activity {
private MyBroadcastReceiver MyReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Receive broadcast from External App
IntentFilter intentFilter = new IntentFilter("com.pkg.perform.Ruby");
MyReceiver = new MyBroadcastReceiver();
if(intentFilter != null)
{
registerReceiver(MyReceiver, intentFilter);
}
}
public class MyBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(MainActivity.this, "Data Received from External App", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if(MyReceiver != null)
unregisterReceiver(MyReceiver);
}
}
Run Code Online (Sandbox Code Playgroud)
我收到错误 - Receiver未注册.
dsh*_*rew 43
首先在清单文件中的app B中声明接收器,如下所示:
<receiver android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.pkg.perform.Ruby" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
当发送广告添加FLAG_INCLUDE_STOPPED_PACKAGES标志到intent [src]时,因为当你从应用A广播到应用B时,应用B可能没有运行,这个标志确保广播甚至可以触及即使没有运行的应用:
FLAG_INCLUDE_STOPPED_PACKAGES标志在发送之前添加到intent中,以指示允许意图启动已停止的应用程序的组件.
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
Run Code Online (Sandbox Code Playgroud)
在你的情况下,它将是这样的:
final Intent intent=new Intent();
intent.setAction("com.pkg.perform.Ruby");
intent.putExtra("KeyName","code1id");
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
intent.setComponent(
new ComponentName("com.pkg.AppB","com.pkg.AppB.MyBroadcastReceiver"));
sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)
小智 6
在 App A 中:在此处发送广播。
final Intent i= new Intent();
i.putExtra("data", "Some data");
i.setAction("com.pkg.perform.Ruby");
i.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
getApplicationContext().sendBroadcast(i);
Run Code Online (Sandbox Code Playgroud)
在 App B 清单中
<receiver android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.pkg.perform.Ruby" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
在 App B MainActivity 中:注册接收者 oncreate(),并取消注册 onDestroy()
public class MainActivity extends AppCompatActivity
{
private MyBroadcastReceiver MyReceiver;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyReceiver = new MyBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter("com.pkg.perform.Ruby");
if(intentFilter != null)
{
registerReceiver(MyReceiver, intentFilter);
}
}
@Override
protected void onDestroy()
{
super.onDestroy();
if(MyReceiver != null)
unregisterReceiver(MyReceiver);
}
}
Run Code Online (Sandbox Code Playgroud)
在 App B 中广播接收器
public class MyBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
String data = intent.getStringExtra("data");
Log.i("BR" ,"Data received: " + data);
}
}
Run Code Online (Sandbox Code Playgroud)
MyReceiver 是类而不是对象。创造
myReceiver = new MyReceiver();
Run Code Online (Sandbox Code Playgroud)
并把…………
registerReceiver(myReceiver,intentFilter);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23542 次 |
| 最近记录: |