0

Ich habe ein Projekt erstellt, wo die App SMS empfangen kann. Es lief gut, aber als ich versuchte, es zu meinem Hauptprojekt zu implementieren, "würde es nicht funktionieren. Ich versuche, den Broadctreceiver zu meinem Fragment zu implementieren. Ich versuchte Google und verschiedene Foren die meisten von ihnen sagten, dass es die Berechtigungen waren, aber meins bereits gesetzt ist :(. hoffe wirklich, dass ich in dieser Klarheit bekommen.Sms broadcastreceiver funktioniert nicht in meinem Fragment

Mein Fehlerprotokoll dies sagt.

FATAL EXCEPTION: main 
 
                    Process: c.timno.smsgsm20, PID: 23636 
 
                    java.lang.RuntimeException: Error receiving broadcast Intent { act=android.provider.Telephony.SMS_RECEIVED flg=0x8000010 (has extras) } in [email protected] 
 
                     at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:788) 
 
                     at android.os.Handler.handleCallback(Handler.java:733) 
 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
 
                     at android.os.Looper.loop(Looper.java:136) 
 
                     at android.app.ActivityThread.main(ActivityThread.java:5103) 
 
                     at java.lang.reflect.Method.invokeNative(Native Method) 
 
                     at java.lang.reflect.Method.invoke(Method.java:515) 
 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:788) 
 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:604) 
 
                     at dalvik.system.NativeStart.main(Native Method) 
 
                    Caused by: java.lang.NullPointerException 
 
                     at c.timno.smsgsm20.ThirdFragment.processReceive(ThirdFragment.java:75) 
 
                     at c.timno.smsgsm20.ThirdFragment$1.onReceive(ThirdFragment.java:55) 
 
                     at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:778) 
 
                     at android.os.Handler.handleCallback(Handler.java:733)  
 
                     at android.os.Handler.dispatchMessage(Handler.java:95)  
 
                     at android.os.Looper.loop(Looper.java:136)  
 
                     at android.app.ActivityThread.main(ActivityThread.java:5103)  
 
                     at java.lang.reflect.Method.invokeNative(Native Method)  
 
                     at java.lang.reflect.Method.invoke(Method.java:515)  
 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:788)  
 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:604)  
 
                     at dalvik.system.NativeStart.main(Native Method) 

Mein android-Manifest.

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
 
    package="c.timno.smsgsm20"> 
 

 

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

 

 

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

 

 

 

 
     <activity android:name=".MainActivity" 
 

 
      android:label="@string/app_name" 
 
      android:theme="@style/AppTheme.NoActionBar"> 
 
     <intent-filter> 
 
     <action android:name="android.intent.action.MAIN" /> 
 
     <category android:name="android.intent.category.DEFAULT" /> 
 
     </intent-filter> 
 
      <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity"/> 
 

 
</activity> 
 

 

 

 

 

 
     <!-- 
 
ATTENTION: This was auto-generated to add Google Play services to your project for 
 
    App Indexing. See https://g.co/AppIndexing/AndroidStudio for more information. 
 
     --> 
 
     <meta-data 
 
      android:name="com.google.android.gms.version" 
 
      android:value="@integer/google_play_services_version" /> 
 

 

 
     <activity 
 
      android:name=".SettingsActivity" 
 
      android:label="@string/title_activity_settings"></activity> 
 
    </application> 
 

 
</manifest>

Mein Fragment

package c.timno.smsgsm20; 
 

 
import android.app.Fragment; 
 
import android.content.BroadcastReceiver; 
 
import android.content.Context; 
 
import android.content.Intent; 
 
import android.content.IntentFilter; 
 
import android.content.SharedPreferences; 
 
import android.os.Bundle; 
 
import android.support.annotation.Nullable; 
 
import android.support.v7.app.AppCompatActivity; 
 
import android.telephony.SmsManager; 
 
import android.telephony.SmsMessage; 
 
import android.view.LayoutInflater; 
 
import android.view.View; 
 
import android.view.ViewGroup; 
 
import android.widget.Button; 
 
import android.widget.EditText; 
 
import android.widget.TextView; 
 
import android.widget.Toast; 
 

 
/** 
 
* Created by TimNo on 2016-09-09. 
 
*/ 
 
public class ThirdFragment extends Fragment{ 
 

 

 

 

 
    private View view ; 
 

 

 
    View myView; 
 
    BroadcastReceiver receiver=null; 
 
    @SuppressWarnings("ResourceType") 
 
    @Override 
 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
 
     View view = inflater.inflate(R.layout.third_layout, container, false); 
 
     return inflater.inflate(R.layout.third_layout, container, false); 
 

 

 
    } 
 

 

 

 
    @Override 
 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
 
     view = getActivity().findViewById(R.id.content_frame); 
 

 

 
     IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); 
 
     receiver = new BroadcastReceiver() { 
 
      @Override 
 
      public void onReceive(Context arr0, Intent arr1) { 
 
       processReceive (arr0, arr1); 
 

 

 
      } 
 
     }; 
 
     getActivity().registerReceiver(receiver,filter); 
 

 

 
    } 
 

 
    public void onDestroy() { 
 

 
     super.onDestroy(); 
 
     getActivity().unregisterReceiver(receiver); 
 

 
    } 
 

 
    public void processReceive (Context context, Intent intent){ 
 

 
     Toast.makeText(context, "You got a message",Toast.LENGTH_LONG).show(); 
 
     TextView lbs = (TextView)view.findViewById(R.id.textvview); 
 

 

 
     Bundle bundle = intent.getExtras(); 
 
     Object[] objArr= (Object[])bundle.get("pdus"); 
 
     String sms =""; 
 

 
     for (int i=0;i<objArr.length;i++){ 
 
      SmsMessage smsMsg = SmsMessage.createFromPdu((byte[])objArr[i]); 
 
      String smsBody = smsMsg.getMessageBody(); 
 
      String senderNumber = smsMsg.getDisplayOriginatingAddress(); 
 
      sms +="From: " + senderNumber+"\nContent: "+smsBody+"\n"; 
 
     } 
 
     lbs.setText(sms); 
 

 
    } 
 
}

Vielen Dank im Voraus!

+0

'Nullpointer bei ... (ThirdFragment.java:75)' -.. Schauen Sie sich die Leitung 75 in Ihre 'ThirdFragment' Klasse Sieht aus wie' view' null ist –

+0

ich nehme Ihre App SMS erhält wenn es im Vordergrund ist, aber NPE aufhebt, wenn es nicht auf dem Bildschirm ist, ist das richtig? – nandsito

Antwort

0

Die Lösung war, dass der Code in meiner MainActivity.java gewesen sein sollte. Ich denke, Broadcastreceiver kann nur "von MainActivity und nicht in der Fragment.java aufgerufen werden. Ich legte den Code auf meinem onResume und es funktionierte: D. Meine Textansicht (wo die SMS ich geladen) ist in der Fragment-XML-Datei.

BroadcastReceiver receiver=null; 
 
    @Override 
 
    protected void onResume() { 
 
     super.onResume(); 
 
    
 

 

 
     IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); 
 
     receiver = new BroadcastReceiver() { 
 
      @Override 
 
      public void onReceive(Context arr0, Intent arr1) { 
 
       processReceive (arr0, arr1); 
 

 

 
      } 
 
     }; 
 
     registerReceiver(receiver,filter); 
 

 

 
    } 
 

 
    public void onDestroy() { 
 

 
     super.onDestroy(); 
 
     unregisterReceiver(receiver); 
 

 
    } 
 

 
    public void processReceive (Context context, Intent intent){ 
 

 
     Toast.makeText(context, "You got a message",Toast.LENGTH_LONG).show(); 
 
     TextView lbs = (TextView)findViewById(R.id.textvviewtsmsruta); 
 

 

 
     Bundle bundle = intent.getExtras(); 
 
     Object[] objArr= (Object[])bundle.get("pdus"); 
 
     String sms =""; 
 

 
     for (int i=0;i<objArr.length;i++){ 
 
      SmsMessage smsMsg = SmsMessage.createFromPdu((byte[])objArr[i]); 
 
      String smsBody = smsMsg.getMessageBody(); 
 
      String senderNumber = smsMsg.getDisplayOriginatingAddress(); 
 
      sms +="From: " + senderNumber+"\nContent: "+smsBody+"\n"; 
 
     } 
 
     lbs.setText(sms); 
 

 

 

 
    }

Verwandte Themen