Android:java.lang.SecurityException:权限拒绝:

蚂蚁

我有一个需要接收短信的android应用程序,我找到了一个特定的教程来教该怎么做,但是当我运行它时,我得到了android权限异常

致命异常:主要过程:androidreceivesms.javapapers.com.smsbroadcastreceiver,PID:12206 java.lang.RuntimeException:无法启动活动ComponentInfo {androidreceivesms.javapapers.com.smsbroadcastreceiver / androidreceivesms.javapapers.com.smsbroadcastreityr.Sms lang.SecurityException:权限拒绝:从pid = 12206中读取com.android.providers.telephony.SmsProvider uri content:// sms / inbox,uid = 10061需要android.permission.READ_SMS或android.app.ActivityThread上的grantUriPermission() android.app.ActivityThread.handle的.performLaunchActivity(ActivityThread.java:2416)android.app.ActivityThread $ H.handleMessage(ActivityThread)处的android.app.ActivityThread.-wrap11(ActivityThread.java)处的LaunchActivity(ActivityThread.java:2476) .java:1344),位于android.os.Handler.dispatchMessage(Handler.java:102)。android.app.ActivityThread.main(ActivityThread.java:5417)的Looper.loop(Looper.java:148)com.android.internal.os.ZygoteInit $的java.lang.reflect.Method.invoke(Native Method)处的Looper.loop(Looper.java:148) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)上的MethodAndArgsCaller.run(ZygoteInit.java:726)原因:java.lang.SecurityException:权限被拒绝:正在读取com.android.providers.telephony。来自pid = 12206的SmsProvider uri content:// sms / inbox,uid = 10061需要android.permission.READ_SMS或位于android.database.DatabaseUtils的android.os.Parcel.readException(Parcel.java:1599)上的grantUriPermission()。位于android.content.ContentResolver的android.content.ContentProviderProxy.query(ContentProviderNative.java:421)的android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)的readExceptionFromParcel(DatabaseUtils.java:183)。androidrequests.javapapers.com.smsbroadcastreceiver.SmsActivity.refreshSmsInbox(SmsActivity.java:52)上的android.content.ContentResolver.query(ContentResolver.java:434)上的query(ContentResolver.java:491) .SmsActivity.onCreate(SmsActivity.java:47)在android.app.Activity.performCreate(Activity.java:6237)在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)在android.app.ActivityThread.performLaunchActivity( android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)上的ActivityThread.java:2369)android.app.ActivityThread $ H.handleMessage(ActivityThread.java :)上android.app.ActivityThread.-wrap11(ActivityThread.java)上的ActivityThread.java: 1344),位于android.os.Looper.loop(Looper.java:148),位于android.os.Handler.dispatchMessage(Handler.java:102)。com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)处java.lang.reflect.Method.invoke(本机方法)处的ActivityThread.main(ActivityThread.java:5417)。 internal.os.ZygoteInit.main(ZygoteInit.java:616)

这是我的AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".SmsActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver android:name=".SmsBroadcastReceiver" android:exported="true" >
        <intent-filter android:priority="999" >
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>
</application>

这是我的SmsActivity.java

public class SmsActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

private static SmsActivity inst;
ArrayList<String> smsMessagesList = new ArrayList<String>();
ListView smsListView;
ArrayAdapter arrayAdapter;

public static SmsActivity instance() {
    return inst;
}

@Override
public void onStart() {
    super.onStart();
    inst = this;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sms);
    smsListView = (ListView) findViewById(R.id.SMSList);
    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, smsMessagesList);
    smsListView.setAdapter(arrayAdapter);
    smsListView.setOnItemClickListener(this);

    refreshSmsInbox();
}

public void refreshSmsInbox() {
    ContentResolver contentResolver = getContentResolver();
    Cursor smsInboxCursor = contentResolver.query(Uri.parse("content://sms/inbox"), null, null, null, null);
    int indexBody = smsInboxCursor.getColumnIndex("body");
    int indexAddress = smsInboxCursor.getColumnIndex("address");
    if (indexBody < 0 || !smsInboxCursor.moveToFirst()) return;
    arrayAdapter.clear();
    do {
        String str = "SMS From: " + smsInboxCursor.getString(indexAddress) +
                "\n" + smsInboxCursor.getString(indexBody) + "\n";
        arrayAdapter.add(str);
    } while (smsInboxCursor.moveToNext());
}

public void updateList(final String smsMessage) {
    arrayAdapter.insert(smsMessage, 0);
    arrayAdapter.notifyDataSetChanged();
}

public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
    try {
        String[] smsMessages = smsMessagesList.get(pos).split("\n");
        String address = smsMessages[0];
        String smsMessage = "";
        for (int i = 1; i < smsMessages.length; ++i) {
            smsMessage += smsMessages[i];
        }

        String smsMessageStr = address + "\n";
        smsMessageStr += smsMessage;
        Toast.makeText(this, smsMessageStr, Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

这是我的SmsBroadcastReceiver.java

public class SmsBroadcastReceiver extends BroadcastReceiver {
public static final String SMS_BUNDLE = "pdus";

public void onReceive(Context context, Intent intent) {
    Bundle intentExtras = intent.getExtras();
    if (intentExtras != null) {
        Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE);
        String smsMessageStr = "";
        for (int i = 0; i < sms.length; ++i) {
            SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);

            String smsBody = smsMessage.getMessageBody().toString();
            String address = smsMessage.getOriginatingAddress();

            smsMessageStr += "SMS From: " + address + "\n";
            smsMessageStr += smsBody + "\n";
        }
        Toast.makeText(context, smsMessageStr, Toast.LENGTH_SHORT).show();

        //this will update the UI with message
        SmsActivity inst = SmsActivity.instance();
        inst.updateList(smsMessageStr);
    }
}

}

有人可以帮我吗,因为我已经在这里待了很长时间了?任何帮助将不胜感激谢谢

亚历山大大帝

看起来像它,因为android 6中的新权限系统会在使用sms之前尝试使用它

if(ContextCompat.checkSelfPermission(getBaseContext(), "android.permission.READ_SMS") == PackageManager.PERMISSION_GRANTED) {}

这,如果您没有权限

ActivityCompat.requestPermissions(SmsActivity.this, new String[]{"android.permission.READ_SMS"}, REQUEST_CODE_ASK_PERMISSIONS);

我希望这有帮助

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

java.lang.SecurityException:BLUETOOTH权限崩溃。(仅限三星设备)

java.lang.SecurityException:权限拒绝:启动Intent {act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER]

java.lang.SecurityException:权限策略文件未由受信任的签名者签名

java.lang.SecurityException:权限拒绝:实现内容提供者时打开提供者

应用因java.lang.SecurityException崩溃:权限被拒绝

SecurityException:权限被拒绝(缺少INTERNET权限?)

带有反射的java.lang.SecurityException

java.lang.SecurityException:权限拒绝:在测试中使用UiAutomation时,getIntentSender()

java.lang.SecurityException:权限拒绝:pid = 1484,uid = 10151(需要uid = 1000)中的getIntentSender()

java.lang.SecurityException:权限拒绝:在从画廊拍照时读取Android中的com.android.providers.media.MediaProvider

致命异常:java.lang.SecurityException:缺少插入徽章的权限

在Android上发送电子邮件的“ java.lang.SecurityException:权限拒绝:启动意图”

Android 8.0上的Android崩溃Oreo:SecurityException:权限拒绝:null要求以用户450身份运行,但正在从用户0调用

java.lang.SecurityException:权限拒绝:startForeground Android 9.0 Pie API 28

托管小部件获取java.lang.SecurityException:权限拒绝错误

无法通过ADB启动应用程序,但出现“ java.lang.SecurityException:权限拒绝:启动意图”异常

java.lang.SecurityException:我的位置需要权限ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION

我得到:java.lang.SecurityException:“ gps”位置提供程序需要ACCESS_FINE_LOCATION权限

java.lang.SecurityException:无法锁定用户偏好。锁定文件访问被拒绝

java.lang.SecurityException:权限拒绝:不允许仅在KitKat上发送广播android.intent.action.MEDIA_MOUNTED

java.lang.SecurityException:权限拒绝:打开提供程序

java.lang.SecurityException:权限被拒绝

Android Runtime权限(权限被拒绝)

java.lang.SecurityException:权限拒绝:启动意图 {act=android.settings.USAGE_ACCESS_SETTINGS}

Android:java.lang.SecurityException:权限拒绝:开始发送邮件的意图

Java.lang.SecurityException:权限拒绝:在 sdk 24 及更高版本上打开提供程序?

“java.lang.SecurityException: MODIFY_PHONE_STATE 权限需要”在 android 9 pie 中以编程方式杀死电话时

EACCES(权限被拒绝)Android

java.lang.SecurityException:权限拒绝:启动意图