0

SMSを受信して​​トーストを表示するアプリケーションで作業していますブロードキャストレシーバーと私はそのアクティビティを削除しても、 APKを構築して携帯電話で実行すると、SMSが受信されたとき(Toastは表示されていない)、アプリケーションは応答しませんが、コードは以前と同じです。誰もが私はとてもこだわって、何百もの答えを読んで自分自身を助けることができないように助けてください。私はサービスを作るべきだと考えましたが、まだトーストは出ていません。以下は私のコードです。自分のアプリケーションにGUIを持たせることはできません。GUIなしでBroadcastReceiverでAndroidサービスを使用してSMSを受信する方法

BroadcastReceiver.java

package com.test.testservice; 

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



public class SmsReceiver extends BroadcastReceiver { 

    public static final String SMS_BUNDLE = "pdus"; 
    private static final String LOG = "SmsBroadcastReceiver"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Bundle intentExtras = intent.getExtras(); 
     if (intentExtras != null) { 
      Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE); 


      if (sms != null) 
      { 
       String smsMessageStr = ""; 

       for (int i = 0; i < sms.length; ++i) 
       { 
        SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]); 

        String smsBody = smsMessage.getMessageBody().toString(); 
        String address = smsMessage.getOriginatingAddress(); 

        smsMessageStr += "SMS From: " + address + "\n"; 
        smsMessageStr += smsBody + "\n"; 
       } 
       Toast.makeText(context, smsMessageStr, Toast.LENGTH_LONG).show(); 
       //MyService objService=new MyService(); 
       //objService.startService(intent); 
       //objService.stopService(intent); 


       Intent myIntent = new Intent(context, MyService.class); 
       //myIntent.putExtra("Sender", Sender); 
       //myIntent.putExtra("Fullsms", Fullsms); 
       context.startService(myIntent); 


      } 
     } 
    } 
} 

MyService.java

package com.test.testservice; 

import android.app.Service; 
import android.content.ComponentName; 
import android.content.Intent; 
import android.os.IBinder; 
import android.support.annotation.Nullable; 
import android.util.Log; 
import android.widget.Toast; 

public class MyService extends Service { 
    private static final String LOG = "MyService"; 
    @Override 
    public boolean stopService(Intent name) { 
     if (super.stopService(name)) 
     { 
      Toast.makeText(this,"HELLO stopService",Toast.LENGTH_LONG).show(); 
      Log.i(LOG, "stopService"); 
      return true; 
     } 
     else return false; 
    } 

    @Override 
    public ComponentName startService(Intent service) { 
     return super.startService(service); 
    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Toast.makeText(this,"HELLO onCreate",Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onStart(Intent intent, int startId) { 
     super.onStart(intent, startId); 
     Toast.makeText(this,"HELLO onStart",Toast.LENGTH_LONG).show(); 
    } 
} 

のAndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 

    package="com.test.testservice"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 


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

    </application> 

    <service android:name="com.test.testservice.service.MyService"/> 

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <uses-permission android:name="android.permission.WRITE_SMS" /> 
    <uses-permission android:name="android.permission.READ_SMS" /> 
    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
</manifest> 
+0

GUIなしでサービスを作成し、電話にインストールできますか?その後、そのサービスを実行する別のアプリを作成し、サービスを実行すると、その2番目のアプリをアンインストールしますか? –

答えて

0

Unlを自分の携帯電話を作成しているか、独自のカスタムROMを作成している場合は、アクティビティが必要です。 BroadcastReceiverは、アプリの初回インストール時には機能しません。ユーザーがアクティビティを開始した後でのみ動作します(または、別のコンポーネントで明示的にIntentを使用してコンポーネントの1つを起動する)。

私はその後、あなたのアプリがAndroidデバイスのエコシステムの広大な大部分を占めるのAndroid 3.1以上のデバイス上で動作しません

自分のアプリケーション内の任意のGUIを持つことはできません。

関連する問題