簡體   English   中英

我的應用程序在模擬器上工作(Pixel 2 Api 25)但不在安卓設備上(Andriod 版本[9、8 等])

[英]My App Is Working On Emulator (Pixel 2 Api 25)but not on android device(Andriod Version[9 , 8 etc])

主要活動.java

package com.example.smsread;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.lang.reflect.Array;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    ListView listView;

    private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 100;
    ArrayList<String> smsList;
    //private static final String TAG == MainActivity.class.getSimpleName()


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView) findViewById(R.id.idList);

        int permissionCheck = ContextCompat.checkSelfPermission( this,
                Manifest.permission.READ_SMS);

        if(permissionCheck == PackageManager.PERMISSION_GRANTED) {
            showContacts();
        } else {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.READ_SMS},
                    PERMISSIONS_REQUEST_READ_CONTACTS);
        }
        }
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResult){
        if(requestCode == PERMISSIONS_REQUEST_READ_CONTACTS){
            if(grantResult[0] == PackageManager.PERMISSION_GRANTED) {
                showContacts();
            }else {
                Toast.makeText(this,
                        "Until you grant the permission, we cannot display the names",
                        Toast.LENGTH_SHORT).show();
            }
        }

}

    private void showContacts(){
        Uri inboxUri = Uri.parse("content://sms/inbox");
        smsList = new ArrayList<>();
        ContentResolver contentResolver = getContentResolver();

        Cursor cursor = contentResolver.query(inboxUri, null, null, null, null);
        while (cursor.moveToNext()){
            String number = cursor.getString(cursor.getColumnIndexOrThrow("address")).toString();
            String body = cursor.getString(cursor.getColumnIndexOrThrow("body")).toString();

            //String number = "098765432";
            //String body = "lat: 33.584317N long: 73.045458";
            String data = body;
            String[] args = data.split(" ");
            String latitude = args[1];
            String longitude = args[3];
            Log.d("Args",args[1]);
            Log.d("Args",args[3]);
            smsList.add("Number:" + number + "\n" + "Body:" + body);
                    // + "\n"+"latitude:" +latitude+ "\n" + "longitude:" +longitude

        }
        cursor.close();
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,
                smsList);

        listView.setAdapter(adapter);
    }

}

活動_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

<ListView
    android:id="@+id/idList"
    android:layout_width="match_parent"
    android:layout_height="350dp"/>

</LinearLayout>

我的代碼在模擬器上運行良好,但在 Android 設備上出現錯誤和崩潰

錯誤

E/AndroidRuntime:致命異常:main java.lang.RuntimeException:無法啟動活動 ComponentInfo{com.example.smsread/com.example.smsread.MainActivity}:java.lang.ArrayIndexOutOfBoundsException:length=2; index=3 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2092) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117) at android.app.ActivityThread.access$700(ActivityThread.java:134) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app .ActivityThread.main(ActivityThread.java:4867) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os .ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774) at dalvik.system.NativeStart.main(Native Method) 由:java.lang .ArrayIndexOutOfBoundsException:長度=2; index=3 at com.example.smsread.MainActivity.showContacts(MainActivity.java:80) at com.example.smsread.MainActivity.onCreate(MainActivity.java:44) at android.app.Activity.performCreate(Activity.java: 5047) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117) 在 android。 app.ActivityThread.access$700(ActivityThread.java:134) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os。 Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4867) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke( Method.java:511) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)在 dalvik.system.NativeStart.main(本機方法)

請幫幫我!我有

您正試圖從錯誤index data中獲取價值。 當前data包含兩項,但您嘗試獲取導致異常的第四項。 嘗試使用

try {
    String data = body;
    String[] args = data.split(" ");

    if(args.length > 3) {
        String latitude = args[1];
        String longitude = args[3];
    }
} catch(Exception ex) {
    // Handle exception here
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM