0

私は、アプリケーションがSMSを受信できるプロジェクトを作成しました。それはうまくいったのですが、私のメインプロジェクトに実装しようとしたときには、 "機能しませんでした。私は自分の断片に放送受信機を実装しようとしています。すでに:(設定されている。本当に私はこの中で、いくつかの明快さを得ることができると思います。Sms broadcastreceiverが私のフラグメントで動作していません

私のエラーログがこれを言う。

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) 

マイアンドロイドマニフェスト。

<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>

マイフラグメント

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); 
 

 
    } 
 
}

事前にあなたのすべてをありがとう!

+0

''(ThirdFragment.java:75)...ではNullPointerException - 。。あなたの 'ThirdFragment'クラスでライン75を見てくださいview'がnullの'のように見える –

+0

私は、あなたのアプリがSMSを受信するとしそれが前景にあるときに、NPEが画面外に出てくると、それは正しいのですか? – nandsito

答えて

0

コードは私のMainActivity.javaにあったはずです。私はbroadcastReceiverが「MainActivityから呼び出され、fragment.javaでは呼び出せない」と思います。コードを私のonResumeに置いて、それがうまくいきました:D。私のtextview(読み込まれたSMS)はフラグメントxmlファイルにあります

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); 
 

 

 

 
    }

関連する問題