Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.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_Xamarin.forms_Xamarin.android - Fatal编程技术网

Android手机在信息读取后才检测到彩信

Android手机在信息读取后才检测到彩信,android,xamarin.forms,xamarin.android,Android,Xamarin.forms,Xamarin.android,我正在使用Xamarin在C#中创建一个Android应用程序,我不明白为什么我的ContentObserver,MMSObserver在收到彩信时没有注意到变化,但在阅读彩信后确实注意到变化。当收到彩信时,ContentObserver是否可以发出通知?如果是,我的代码应该添加/更改什么 MMS观察员: public class MMSObserver : ContentObserver { private readonly Android.Net.Uri _uri; priv

我正在使用Xamarin在C#中创建一个Android应用程序,我不明白为什么我的ContentObserver,
MMSObserver
在收到彩信时没有注意到变化,但在阅读彩信后确实注意到变化。当收到彩信时,ContentObserver是否可以发出通知?如果是,我的代码应该添加/更改什么

MMS观察员:

public class MMSObserver : ContentObserver
{
    private readonly Android.Net.Uri _uri;
    private static readonly string TAG = "MMS Observer";
    public static readonly string MMS_RECEIVED = "MMSObserver.intent.action.MMS_RECEIVED";

    public MMSObserver (Android.Net.Uri uri): base(null)
    {
        _uri = uri;
    }

    public override void OnChange(bool selfChange)
    {
        Log.Info(TAG, "Observed a change.");
        Task.Run(() => {
            Intent mmsIntent = new Intent(MMS_RECEIVED);
            AndroidApp.Context.SendBroadcast(mmsIntent);
        });
        base.OnChange(selfChange);
    }
}
主要活动类别:

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    // Constants for the MMS Observer.
    static readonly Android.Net.Uri MMS_URI = Android.Net.Uri.Parse("content://mms");

    // Create the MMS Observer.
    MMSObserver mmsObserver = new MMSObserver(MMS_URI);

    protected override void OnCreate(Bundle savedInstanceState)
    {
        // Other code not shown

        // Register the MMS Observer to the content resolver.
        ContentResolver.RegisterContentObserver(MMS_URI, false, mmsObserver);
        ContentResolver.NotifyChange(MMS_URI, mmsObserver);

    }

    protected override void OnDestroy()
    {
        ContentResolver.UnregisterContentObserver(mmsObserver);
        base.OnDestroy();
    }
}
Manifest.xml的代码段:

application android:label="App.Android" android:theme="@style/MainTheme">
    <receiver android:name=".MMSReceiver">
        <!-- IntentFilterPriority.HighPriority is equal to 1000 -->
        <intent-filter android:priority="1000">
            <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED"/>
            <data android:mimeType="application/vnd.wap.mms-message" />
        </intent-filter>
    </receiver>
</application>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_MMS"/>
application-android:label=“App.android”android:theme=“@style/MainTheme”>

A
ContentObserver
仅适用于
ContentProvider
,该提供者在提供者的内容更改时调用。如果
ContentProvider
没有调用
NotifyChange()
,则
ContentObserver
将不会收到有关更改的通知

这意味着您需要手动调用notify方法:

ContentResolver.NotifyChange(MMS_URI, null);
注意:可以是
null