2017-02-18 10 views
-1

私はアンドロイドプログラミングでは新しいです。SMSを受信して​​いないときにトーストを作成する

SMSを受信したとき、私は任意のコードを実行について多くを読んだが、それらのすべてが助けてください、私

で作業していません!

は何SMSここ

を受信したとき、私はトーストを作ってやりたいことは、私のAndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.salkhuzayyim.toastwhenreceivesms"> 

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

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

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <receiver 
      android:name=".SmsListener" 
      android:enabled="true" 
      android:exported="true"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

であり、ここであるSmsListner.java

package com.salkhuzayyim.toastwhenreceivesms; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 
import android.widget.Toast; 

public class SmsListener extends BroadcastReceiver { 
    public SmsListener() { 
    } 

    private SharedPreferences preferences; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

     if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){ 
      Bundle bundle = intent.getExtras();   //---get the SMS message passed in--- 
      SmsMessage[] msgs = null; 
      String msg_from; 
      if (bundle != null){ 
       //---retrieve the SMS message received--- 
       try{ 
        Object[] pdus = (Object[]) bundle.get("pdus"); 
        msgs = new SmsMessage[pdus.length]; 
        for(int i=0; i<msgs.length; i++){ 
         msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
         msg_from = msgs[i].getOriginatingAddress(); 
         String msgBody = msgs[i].getMessageBody(); 


         Toast.makeText(context, "SMS Received", Toast.LENGTH_SHORT).show(); 


        } 
       }catch(Exception e){ 
        // Log.d("Exception caught",e.getMessage()); 
       } 
      } 
     } 
    } 
} 

と私は」アンドロイドスタジオを使って、シミュレータは(Nexus_5X_API_25)

私はどんなもの物事をより簡単にするためにあなたと分かち合う?事前に

感謝あなたのコメントに基づいて

+1

あなたはAPI25と言った。 'RECEIVE_SMS'は'危険な 'アクセス許可です。ユーザーから許可を得るように要求しましたか? https://developer.android.com/reference/android/Manifest.permission.html#RECEIVE_SMS –

+0

返信いただきありがとうございます、私はアンドロイドでは新しいと言いましたが、この行では許可が得られませんとにかく、このアプリケーションは私だけで使用されます、それは他のプロジェクトに関連している、それはGoogleプレイストアで利用できません – sulaiman

答えて

1

@sulaiman

:いいえ、下の行は、あなたがSMSを読む必要が許可を与えることはありません。

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

あなたはまだその行が必要です。だからそれを削除しないでください。

これは、Androidが「ランタイムアクセス許可」と呼ぶ理由です。 API 23(6.0以上)以降は、dangerousレベルのすべてのアクセス許可に対して明示的にアクセス許可を求める必要があります。

これがどのように機能するのかをもっと理解してください。here

この質問を解決するには、アプリを最初に開いたときに許可を求める必要があります。 Request Permissionセクションをご覧ください。

+0

ありがとう、私はちょうど許可の新しい方法について知っていた、それは役に立ちました:-) – sulaiman

関連する問題