Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 发送的短信无法获取特定设备的信息_Android_Sms_Contentobserver - Fatal编程技术网

Android 发送的短信无法获取特定设备的信息

Android 发送的短信无法获取特定设备的信息,android,sms,contentobserver,Android,Sms,Contentobserver,我收到了几乎所有设备发送和接收的短信。但我无法从特定型号的特定设备上获得它。像三星S7,S8,S9。还有一些LG设备 奇怪的是,有些S7装置能工作,有些不能 下面是我使用的方式 在应用程序类中注册观察者 private void registerMessageObserver() { String url = "content://sms/"; Uri uri = Uri.parse(url); this.getApplicationContext()

我收到了几乎所有设备发送和接收的短信。但我无法从特定型号的特定设备上获得它。像三星S7,S8,S9。还有一些LG设备

奇怪的是,有些S7装置能工作,有些不能

下面是我使用的方式

在应用程序类中注册观察者

private void registerMessageObserver() {
    String url = "content://sms/";
    Uri uri = Uri.parse(url);
    this.getApplicationContext()
            .getContentResolver()
            .registerContentObserver(uri, true,
                    new MessageObserver(new Handler(), this));
}
//观察员班

import android.content.Context;
import android.database.ContentObserver;
import android.os.Handler;

public class MessageObserver extends ContentObserver {

      private static final String TAG = "MessageObserver";
      Context moContext;


      // Observe message state incoming or outgoing
      public MessageObserver(Handler handler, Context foContext) {
          super(handler);
          moContext = foContext;
      }


       @Override
       public boolean deliverSelfNotifications() {
             Log.i(TAG, "deliverSelfNotifications Changed");
             return true;
       }

       @Override
       public void onChange(boolean selfChange) {
            Log.i(TAG, "Message Changed");
            super.onChange(selfChange);
            Log.i(TAG, "Message Changed after super");

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && moContext .checkCallingOrSelfPermission(Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED)
                   return;

            String[] laColumns = new String[]{"_id", "type", "address", "body", "date", "person"};
            Uri loUriAllMessages = Uri.parse("content://sms/");

            Cursor loCursor = moContext.getContentResolver().query(loUriAllMessages, laColumns, null, null, "_id DESC");

            if (loCursor != null) {
                if (loCursor.moveToFirst()) {
                    int liMessageId = loCursor.getInt(loCursor.getColumnIndex("_id"));
                    String lsType = loCursor.getString(loCursor.getColumnIndex("type")).trim();
                            //Doing my stuff here 
                 }
            }
            if (loCursor != null)
                loCursor.close();
      }
}
正如我在大多数设备中所说的,它工作起来很有魅力。但有些设备甚至在更改未调用时也未调用此功能

我尝试了下面的方法,但在任何情况下都不会调用onchange

private void registerMessageObserverSent() {
    String url = "content://sms/sent";
    Uri uri = Uri.parse(url);
    this.getApplicationContext()
            .getContentResolver()
                .registerContentObserver(uri, true, 
                         new MessageObserverSent(new Handler(), this));
}

private void registerMessageObserverOut() {
    String url = "content://sms/out";
        Uri uri = Uri.parse(url);
        this.getApplicationContext()
                .getContentResolver()
                    .registerContentObserver(uri, true,
                            new MessageObserverOut(new Handler(), this));
}
我尝试了广播接收器,但接收器仅用于接收消息

任何人都可以帮助解决这些设备的问题


应用程序处于脱机状态,因此play store策略没有问题。这是我个人使用的。

我发现你的代码有问题。它不工作的设备的操作系统版本是什么?@Piyush它的各种版本,8.0和9.0,三星SM-G950U(9)@user1241241什么?更奇怪的是,有时非常罕见,我可以收到发送的短信,但仍然是100分之一。在过去的7天里,我收到了两封相同的邮件,但是收到了两封,其他的都收到了。