我对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>
我缺少什么?
答案 0 :(得分:0)
我们在评论中确定SMS_RECEIVED
广播正被其他应用拦截和中止。这在KitKat(API 19)之前的Android中是可能的,但从那以后版本就不存在。
解决方案是使用IntentFilter
方法将999
实例的优先级设置为IntentFilter#setPriority()
。
但请注意,在您收到广播之前,其他应用仍然可以中止广播。虽然文档说具有相同优先级IntentFilter
的接收者将以任意顺序传送广播,但通常会按照安装应用的顺序传送它们。此外,某些应用程序(例如系统应用程序,预安装的应用程序等)的优先级可能高于999
,这是您应用的最大实用价值。