2016-02-21 2 views
0

Это единственное, что не разрешено для нашего проекта. Предполагая, что приложение уже установлено на чей-то телефон. Затем мы хотим запустить приложение, отправив ему/ей сообщение, которое соответствует параметру тела сообщения в нашей программе. Я следил за некоторыми кодами, но, похоже, все те, которые я пробовал, не работали. Пожалуйста, уважайте. Благодарим вас за тех, кто щедро помогает.Автоматически запускать приложение для Android, отправив sms

public class SmsReceiver extends BroadcastReceiver{ 

    public static String trigger = ""; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle bundle = intent.getExtras(); 
     SmsMessage[] msgs = null; 
     String str=""; 
     String num=""; 
     Intent i = new Intent(); 
     i.setClassName("gavadev.com.autolaunch", "gavadev.com.autolaunch.NewAct"); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 



     if(bundle != null){ 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      msgs= new SmsMessage[pdus.length]; 


      for(int j =0 ;j<pdus.length; j++) { 

       trigger = msgs[j].getMessageBody().toString(); 
       num = msgs[j].getOriginatingAddress(); 

       str += trigger; 



      } 
      Toast.makeText(context,"From: "+num+ " Message: " +trigger,Toast.LENGTH_LONG).show(); 
      if((trigger.equals("themessage"))&&(num.equals("thenumber"))){ 
       context.startActivity(i); 

      } 
     } 
    } 
} 

Вот мой Manifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="gavadev.com.autolaunch"> 

    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 
    <uses-permission android:name="android.permission.READ_SMS" /> 
    <uses-permission android:name="android.permission.SEND_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" 
      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> 

     <receiver android:name=".SmsReceiver"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 

     <activity 
      android:name=".NewAct" 
      android:label="@string/title_activity_new" 
      android:theme="@style/AppTheme.NoActionBar"></activity> 
    </application> 

</manifest> 

* Я не сделал ничего на MainActivity.class

+1

Что означает «не работает»? Каковы были ваши ** специфические ** симптомы? – CommonsWare

+0

Я установил его первым в своем телефоне. запрограммированный «HOOD» в качестве триггерного сообщения, а номер телефона моей группы - номер. Я попросил его послать мне «ХОРОШО», но ничего не происходит. Приложение не запускалось. = ( – NOOBIE

+0

Когда вы использовали ваш отладчик или операторы 'Log', чтобы узнать, что происходит в вашем коде, что вы узнали? – CommonsWare

ответ

0

Почему вы не отладить и понять, почему он не называет намерения? Если вы правильно заявляете свой приемник SMS-сообщений, он должен работать без проблем.

Однако, позвольте мне сказать, почему я думаю, что все это плохая идея:

  1. Эти разрешения отпугнуть людей много и очень чувствительны использовать:

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

    Вы должны просто использовать <uses-permission android:name="android.permission.RECEIVE_SMS"/> разрешение только для этого. Посмотрите на this simple example, разумно предложить использовать DDMS для тестирования или издевательства SMS-сообщений для вашей цели. Таким образом, вы можете отладить этот метод и посмотреть, как он работает.

  2. У вас наверняка будет много проблем с вашим приложением с Android Marshmallow и выше. Для этого требуются разрешения во время выполнения, и это опасные типы, которые требуют запроса пользователя во время выполнения. Если вы не объясните, почему вам нужны эти разрешения и почему приложение не может работать без них, они всегда будут отказывать в разрешениях.

  3. Если у вас простой бэкэнд, почему бы вам просто не использовать Push-сообщения для этой цели?

Если вы все-таки решили использовать это, я бы повысить приоритет вашего приемника в манифесте:

<receiver android:name=".SmsReceiver" android:exported="true" > 
    <intent-filter android:priority="1000"> 
    <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 
+0

Так что это означает, что это просто использовать и использовать только разрешение RECEIVE_SMS? Я честно только что узнал основы Программирование на Android, как нас учили в школе.Я пробовал много исследований, которые, возможно, связаны с моей проблемой. Я внимательно следил за каждым шагом. на данный момент не может найти решение. (крики) – NOOBIE

+0

Я обновил пункт 1 моего ответа. Все мы были новичком один раз, не сдавайтесь. Постарайтесь читать и исследовать как можно больше, прежде чем спрашивать здесь, это поможет вам много, и вы научитесь быстрее! :) – GoRoS

0

Используйте этот код:

 public class SmsListener extends BroadcastReceiver{ 

     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(); 
          String match="String to match from TEXT MESSAGE eg.HOOD"; 
if(msgBody.toLowerCase().contains(match.toLowerCase())) 
{ 
Intent launchIntent = getPackageManager().getLaunchIntentForPackage("YOUR PACKAGE NAME OF APP TO LAUNCH"); 
startActivity(launchIntent); 
} 


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

Примечание: В вашем файле манифеста оных BroadcastReceiver-

<receiver android:name=".listener.SmsListener"> 
    <intent-filter> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 

Добавить в избранное:

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

Спасибо! попробует =) – NOOBIE

+0

@ «Intent launchIntent = getPackageManager(). getLaunchIntentForPackage (« ВАШ ПАКЕТ ИМЯ APP ДЛЯ ЗАПУСКА »); startActivity (launchIntent); ошибка в getPackageManager и startActivity и переменные могут казаться неиспользованными. В любом случае спасибо. – NOOBIE

+0

У вас вставлено имя вашего пакета в двойные кавычки? – user5783725

Смежные вопросы