sendBroadcast android example with permissions
时间: 2024-09-09 17:10:25 浏览: 54
在Android中,`sendBroadcast()` 方法用于向所有注册了特定广播接收器的应用发送一条广播信息。如果你需要发送广播并要求权限,通常是在应用启动或者某些操作完成之后。这里有一个简单的示例:
首先,你需要在 AndroidManifest.xml 文件里声明需要使用的广播意图(intent)以及相应的权限:
```xml
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<!-- 如果有其他自定义权限 -->
<!-- <uses-permission android:name="your.package.permission.YOUR_PERMISSION_NAME" /> -->
<intent-filter>
<action android:name="com.example.YOUR_ACTION" />
</intent-filter>
```
然后,在你的 Activity 或者 Service 中发送广播:
```java
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
public class YourActivity extends AppCompatActivity {
private static final String ACTION_YOUR_ACTION = "com.example.YOUR_ACTION";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 请求权限(如果在Manifest文件中只写了BROADCAST_STICKY,此处不需要)
if (ContextCompat.checkSelfPermission(this, Manifest.permission.BROADCAST_STICKY)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.BROADCAST_STICKY},
REQUEST_SEND_BROADCAST);
} else {
sendBroadcast(new Intent(ACTION_YOUR_ACTION));
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case REQUEST_SEND_BROADCAST:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 用户同意权限后,再次尝试发送广播
sendBroadcast(new Intent(ACTION_YOUR_ACTION));
} else {
// 权限请求被拒绝,处理这种情况
Toast.makeText(this, "缺少广播权限", Toast.LENGTH_SHORT).show();
}
break;
}
}
// 创建一个简单的 BroadcastReceiver 接收广播
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (ACTION_YOUR_ACTION.equals(intent.getAction())) {
// 在这里处理接收到的广播数据
Log.d("BroadcastReceiver", "Received action: " + intent.getAction());
}
}
};
@Override
protected void onResume() {
super.onResume();
registerReceiver(broadcastReceiver, new IntentFilter(ACTION_YOUR_ACTION));
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(broadcastReceiver);
}
}
```
在这个例子中,当你获得 `BROADCAST_STICKY` 的权限后,会发送一个包含自定义动作 (`ACTION_YOUR_ACTION`) 的广播,并且在 `onResume()` 中注册一个接收器以便监听这个广播。
阅读全文