#android #android-activity #android-manifest
#Android #android-активность #android-манифест
Вопрос:
У меня есть два действия запуска,
1. Действие приемника, которое является широковещательным приемником.
2. Действие, которое должно быть основным действием запуска.
При поступлении SMS действие получателя запускает .MainActivity
(BroadcastReceiver) и далее запускает одну службу. (Без графического интерфейса пользователя) и без открывающей Settings
активности.
Другое действие .Settings
является основным действием запуска.
Цель, которую я хочу достичь:
Когда пришло sms, receiver
действие работает как есть. Но когда я хочу изменить настройки Setting
, начинается действие.
Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.aa"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.RECEIVE_SMS" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.aa.FindLocation"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.example.aa.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.example.aa.Settings"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.example.aa.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".MainActivity"
android:enabled="false" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</receiver>
<service android:name=".Servc" >
<intent-filter>
<action android:name="com.example.Servc" />
</intent-filter>
</service>
</application>
</manifest>
Проблема
1.
[2014-07-06 02:55:14 — Aa] Загрузка Aa.apk на устройство ‘S5830f4524b76’
[2014-07-06 02:55:14 — Aa] Установка Aa.apk…
[2014-07-06 02:55:18 — Aa] Успех!
[2014-07-06 02:55:18 — Aa] Запуск действия com.example.aa.Settings на устройстве S5830f4524b76
[2014-07-06 02:55:19 — Aa] ActivityManager: Запуск: намерение { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.aa/.Settings }
2.
Какие изменения следует внести в манифест, чтобы он заработал?
Комментарии:
1. Что вы имеете в виду «Когда приходит SMS, действие получателя запускает. MainActivity «. Я не вижу никакой «активности получателя» в вашем манифесте. Я думаю, вы имеете в виду «.MainActivity запускается при получении sms».
Ответ №1:
Не определяйте свой sms-приемник в манифесте. Удалите его.
Создайте широковещательный приемник, который запускается при загрузке, определив приведенный ниже элемент в вашем манифесте :
<receiver android:name=".BootUpReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
Вам нужно будет добавить это разрешение в свой манифест :
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
Затем зарегистрируйте там свой BroadcastReceiver для приема sms :
public class BootUpReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
SmsReceiver smsreceiver = new SmsReceiver();
IntentFilter fltr_smsreceived = new IntentFilter(
"android.provider.Telephony.SMS_RECEIVED");
registerReceiver(smsreceiver, fltr_smsreceived);
}
}
SmsReceiver
это ваш широковещательный приемник. Например :
public class SmsReceiver extends BroadcastReceiver {
void setActivityHandler(){
//instantiate member variables if required
}
@Override
public void onReceive(Context context, Intent intent) {
Bundle pdusBundle = intent.getExtras();
Object[] pdus=(Object[])pdusBundle.get("pdus");
SmsMessage messages=SmsMessage.createFromPdu((byte[]) pdus[0]);
Log.d("tag","message body : " messages.getMessageBody());
}
}
Комментарии:
1. [2014-07-06 04:47:04 — Aa] ActivityManager: Запуск: намерение { act=android.intent.action. MAIN cat=[android.intent.category. LAUNCHER] cmp=com.example.aa/.Settings }
2. SMSReceiver не является предопределенным классом… Что должно быть внутри
SmsReceiver
?3. замените
SmsReceiver
своим классом sms BroadcastReceiver. Это должно бытьMainActivity
в вашем случае.