2016-12-01 41 views
0

我正在使用Android 4.4.4版本的Hauwei设备运行。关闭应用程序后广播接收器不会被呼叫

当我打开我的应用程序时,它的广播接收器工作正常,但是当我通过关闭所有最近的应用程序来关闭应用程序时,广播接收器只是停止触发。我搜查了很多,但我找不到解决方案。

权限:

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

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


    <activity android:name=".MainActivity"> 
     <intent-filter> 

      <action android:name="COM.EXAMPLE.SIVA.MAINACTIVITY" /> 


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

    </application> 

这是我的广播接收器:

public class MySmsReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    Toast.makeText(context, "sms received", Toast.LENGTH_SHORT).show(); 
} 
    } 

清除最近的应用我后选中我的应用程序默认设置应用程序那里我的应用程序强制停止按钮被禁用..

回答

0

你必须创建一个服务:

AndroidManifest.xml中

<service android:name=".SomeService" 
     android:process="com.example.SomeService" 
     android:enabled="true" 
     /> 

SomeService.java

public class SomeService extends Service{ 

    public static final String START_SERVICE = "start"; 
    public static final String STOP_SERVICE = "stop"; 

    private SomeReceiver someReceiver; 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     String action = intent.getAction(); 
     switch (action) { 
      case START_SERVICE: 
       if (someReceiver == null) { 
        createReceiver(); 
       } 
       registerReceiver(intent); 
       startForeground((int) Thread.currentThread().getId(), new NotificationCompat.Builder(getBaseContext()).build()); 
       break; 
      case STOP_SERVICE: 
       unregisterReceiver(); 
       stopSelf(); 
     } 

     return START_STICKY; 
    } 

    private void createReceiver() { 
     someReceiver = new SomeReceiver(); 
     filter = new IntentFilter(); 
     filter.addAction(ACTION_TIME_TICK); 
    } 

    private void registerReceiver(Intent intent){ 
     unregisterReceiver(); 

     registerReceiver(someReceiver, filter); 
    } 

    private void registerReceiver(){ 
     unregisterReceiver(); 

     registerReceiver(someReceiver, filter); 
    } 

    private void unregisterReceiver(){ 
     try{ 
      unregisterReceiver(someReceiver); 
     }catch (Exception ex){ 
      ex.printStackTrace(); 
     } 
    } 

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

该接收机收听时间滴答作响。 (ACTION_TIME_TICK - 正在发生的事情一分钟一次)

public class SomeReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i("SomeReceiver", "Tick"); 
    } 

} 

ActivityMain.java

... 
startService(this, SomeService.class); 
... 

所以现在它在AndroidManifest.xml中登记接收器不是必需的。

希望,它有助于

+0

同样的问题仍然存在,人...对不起已故的答复 –

+0

我甲肝补充说,Android的:过程=“COM.EXAMPLE.SIVA.MySmsReceiver” –

+0

这是一个不好回答。 – Mody

相关问题