首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这需要android.permission.INTERACT_ACROSS_USERS_FULL

这需要android.permission.INTERACT_ACROSS_USERS_FULL
EN

Stack Overflow用户
提问于 2015-07-04 19:57:08
回答 1查看 1.9K关注 0票数 0

这个问题与这个问题有关

send and receive sms to verify mobile number

我已经解锁了三星的at&t设备。我正试图通过代码发送信息。但我的代码不工作,所以我连接我的设备与USB,并跟踪问题是什么。我发现我得到了这个例外

代码语言:javascript
复制
981/? E/DatabaseUtils﹕ Writing exception to parcel
    java.lang.SecurityException: Permission Denial: get/set setting for user asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
        at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:13175)
        at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:2044)
        at com.android.providers.settings.SettingsProvider.callFromPackage(SettingsProvider.java:615)
        at android.content.ContentProvider$Transport.call(ContentProvider.java:279)
        at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:273)
        at android.os.Binder.execTransact(Binder.java:388)
        at dalvik.system.NativeStart.run(Native Method)
07-05 00:53:08.676    2411-2981/? W/ActivityManager﹕ Permission Denial: get/set setting for user asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
07-05 00:53:08.691  22617-22617/com.keepAeye.gps E/code is﹕ 29514 

我在清单文件中添加了这些权限

代码语言:javascript
复制
   <uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"/>
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>

但还是不起作用。

我现在该怎么办?

我知道在这个网站上有几个关于这个问题的帖子,但是没有一个对我有帮助。

更新

这是我要发送消息的代码

代码语言:javascript
复制
  private void sendSMS1(String  phoneNumber, String  message)
{
    String  SENT = "SMS_SENT";
    String  DELIVERED = "SMS_DELIVERED";

    PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
            new Intent(SENT), 0);

    PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
            new Intent(DELIVERED), 0);

    //---when the SMS has been sent---
    registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            switch (getResultCode()) {
                case Activity.RESULT_OK:
                    Toast.makeText(getBaseContext(), "SMS sent",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    Toast.makeText(getBaseContext(), "Generic failure",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    Toast.makeText(getBaseContext(), "No service",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NULL_PDU:
                    Toast.makeText(getBaseContext(), "Null PDU",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    Toast.makeText(getBaseContext(), "Radio off",
                            Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }, new IntentFilter(SENT));

    //---when the SMS has been delivered---
    registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            switch (getResultCode()) {
                case Activity.RESULT_OK:
                    Toast.makeText(getBaseContext(), "SMS delivered",
                            Toast.LENGTH_SHORT).show();
                    break;
                case Activity.RESULT_CANCELED:
                    Toast.makeText(getBaseContext(), "SMS not delivered",
                            Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }, new IntentFilter(DELIVERED));

    SmsManager sms = SmsManager.getDefault();

    sms.sendTextMessage("9501921***", null, "hello", sentPI, deliveredPI);
}

它总是会失败的。不知道为什么。

EN

回答 1

Stack Overflow用户

发布于 2015-07-04 20:18:48

为了能够保存INTERACT_ACROSS_USERS,您的应用程序必须由固件的签名键签名,或者必须安装在系统分区上。

为了能够保存INTERACT_ACROSS_USERS_FULL,您的应用程序必须由固件的签名密钥签名。

普通应用程序不会由固件的签名密钥签名,因为这是为设备制造商和那些编写自定义ROM的人签署的。普通应用程序没有安装在系统分区上,因为这是为设备制造商、那些编写自定义ROM的人和那些将其设备作为根的应用程序。

还不清楚为什么你认为你在问题中显示的信息与你的应用程序有关。如果您确信它们确实存在,则需要确定触发这些消息的代码是什么,然后修复该代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31224640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档