似乎无法动态注册 Broadcastreceiver
Can't seem to register Broadcastreceiver dynamically
我是 android 的新手,我一直在尝试动态注册我的 Broadcastreceiver 以便我可以接收 smss ,但我似乎无法让它工作,这是我的代码:
public class MainActivity extends AppCompatActivity {
BroadcastReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(getApplicationContext(), "Hellllo", Toast.LENGTH_SHORT).show();
}
};
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(receiver,filter);
}
"hello" Toast 不会弹出所以我假设接收器没有注册
我把这个权限放在我的清单中:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
我错过了什么?
我们在评论中确定 SMS_RECEIVED
广播被另一个应用拦截和中止。这在 KitKat (API 19) 之前的 Android 中是可能的,但在以后的版本中是不可能的。
解决方案是使用 IntentFilter#setPriority()
方法将 IntentFilter
实例的优先级设置为 999
。
但是请注意,其他应用程序仍然有可能在您的应用程序收到广播之前中止广播。尽管文档说具有相同优先级的 IntentFilter
s 的接收器将以任意顺序传送广播,但通常会发现它们是按照应用程序安装的顺序传送的。此外,某些应用程序(例如系统应用程序、预装应用程序等)的优先级可能高于 999
,这是您应用程序的最大实用价值。
我是 android 的新手,我一直在尝试动态注册我的 Broadcastreceiver 以便我可以接收 smss ,但我似乎无法让它工作,这是我的代码:
public class MainActivity extends AppCompatActivity {
BroadcastReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(getApplicationContext(), "Hellllo", Toast.LENGTH_SHORT).show();
}
};
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(receiver,filter);
}
"hello" Toast 不会弹出所以我假设接收器没有注册
我把这个权限放在我的清单中:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
我错过了什么?
我们在评论中确定 SMS_RECEIVED
广播被另一个应用拦截和中止。这在 KitKat (API 19) 之前的 Android 中是可能的,但在以后的版本中是不可能的。
解决方案是使用 IntentFilter#setPriority()
方法将 IntentFilter
实例的优先级设置为 999
。
但是请注意,其他应用程序仍然有可能在您的应用程序收到广播之前中止广播。尽管文档说具有相同优先级的 IntentFilter
s 的接收器将以任意顺序传送广播,但通常会发现它们是按照应用程序安装的顺序传送的。此外,某些应用程序(例如系统应用程序、预装应用程序等)的优先级可能高于 999
,这是您应用程序的最大实用价值。