Imd*_*dad 13 android broadcastreceiver android-6.0-marshmallow
我刚刚将我的Nexus 5更新为android 6,直到现在我的应用程序工作正常,但现在广播接收器无法正常工作.新版本有什么变化吗?这是我尝试过的代码,用于以前的版本,但不是在marshmallow中 -
Android Manifest
<intent-filter >
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.READ_SMS" ></uses-permission>
Run Code Online (Sandbox Code Playgroud)
广播接收器
public String TAG ="someClass";
private static String ACTION_SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equalsIgnoreCase(ACTION_SMS_RECEIVED)) {
Log.d(TAG, "Received...");
}
}
Run Code Online (Sandbox Code Playgroud)
服务
Broadcast_receiver broadcast_receiver = new Broadcast_receiver();
IntentFilter filter1 = new IntentFilter();
filter1.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(broadcast_receiver, filter1);
Run Code Online (Sandbox Code Playgroud)
同样,PHONE_STATE的广播接收器也不起作用.
Nik*_*tin 10
从Android 6.0(API级别23)开始,用户在应用程序运行时向应用程序授予权限,而不是在安装应用程序时...用户可以随时撤消权限...
它还声明:
系统权限分为正常和危险两类:
普通权限不会直接冒使用户隐私的风险.如果您的应用在其清单中列出了正常权限,系统会自动授予权限
危险权限可以让应用程序访问用户的机密数据.如果您列出了危险权限,则用户必须明确批准您的应用
所有这些基本上意味着您需要在实际需要时手动请求任何危险权限.
由于代码中可能需要多次,因此您可以创建一个可重用的方法来检查是否已授予特定权限,如果不是,则从用户请求.
这是一个例子:
Java的
public class PermissionManager {
//A method that can be called from any Activity, to check for specific permission
public static void check(Activity activity, String permission, int requestCode){
//If requested permission isn't Granted yet
if (ActivityCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {
//Request permission from user
ActivityCompat.requestPermissions(activity,new String[]{permission},requestCode);
}
}
}
Run Code Online (Sandbox Code Playgroud)
科特林
object PermissionManager {
//A method that can be called from any Activity, to check for specific permission
fun check(activity: Activity, permission: String, requestCode: Int) {
//If requested permission isn't Granted yet
if (ActivityCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {
//Request permission from user
ActivityCompat.requestPermissions(activity, arrayOf(permission), requestCode)
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
Java的
//Inside your activity:
//1. Define static constant for each permission request
public static final int REQUEST_CODE_FOR_SMS=1;
//2. When needed (for example inside .onStart event) use method PermissionManager.check for requested permission
@Override
protected void onStart() {
super.onStart();
PermissionManager.check(this, Manifest.permission.RECEIVE_SMS, REQUEST_CODE_FOR_SMS);
}
//3. Handle User's response for your permission request
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if(requestCode==REQUEST_CODE_FOR_SMS){//response for SMS permission request
if(grantResults[0]==PackageManager.PERMISSION_GRANTED){
//What to do if User allowed SMS permission
}else{
//What to do if user disallowed requested SMS permission
}
}
}
Run Code Online (Sandbox Code Playgroud)
科特林
//Inside your activity:
//1. Define static constant for each permission request
val REQUEST_CODE_FOR_SMS = 1
//2. When needed (for example inside .onStart event) use method PermissionManager.check for requested permission
override fun onStart() {
super.onStart()
PermissionManager.check(this, Manifest.permission.RECEIVE_SMS, REQUEST_CODE_FOR_SMS)
}
//3. Handle User's response for your permission request
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
if (requestCode == REQUEST_CODE_FOR_SMS) {//response for SMS permission request
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//What to do if User allowed SMS permission
} else {
//What to do if user disallowed requested SMS permission
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:
如果需要使用PermissionManager.check内部Fragment实例,请使用:getActivity()作为其第一个参数.
您可以使用checkSelfPermission内部Service实例来检查是否已授予某些权限,但不能requestPermissions请求它.因为checkSelfPermission可以用于任何Context,但requestPermissions仅用于Activity
| 归档时间: |
|
| 查看次数: |
17582 次 |
| 最近记录: |