2017-05-16 29 views
0

我正在學習BroadCast接收器。我試圖用下面這段代碼實現的是,當我切換到飛行模式時,我希望看到烤麪包,其中應用程序處於開啓狀態。我沒有做什麼/做錯了什麼?請幫忙。由於爲什麼我的BroadCast接收器不工作?

ConnectivityChangedReceiver.java類

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.widget.Toast; 

public class ConnectivityChangedReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) 
{ 
    Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show(); 

} 
} 

AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?> 

<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 
<action android:name="android.intent.action.BOOT_COMPLETED" /> 
<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"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

    <receiver android:name=".ConnectivityChangedReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.AIRPLANE_MODE"> 
      </action> 
     </intent-filter> 

    </receiver> 

</application> 

MainActivity.java`

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.content.Intent; 


import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity { 

private TextView switchStatus; 
private Switch mySwitch; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
} 
+0

你想這樣做絲毫這個廣播什麼?開始它在什麼後? –

+0

我切換到飛行模式後,我想看到吐司「意圖檢測」 –

+0

什麼設備我們使用?? –

回答

0

所以,我剛剛找到了解決我上面的問題。 我的名字的開頭改變

<receiver android:name=".ConnectivityChangedReceiver"> 

<receiver android:name="ConnectivityChangedReceiver"> 

(如果沒有「」希望它可以幫助擱淺一個!

0

您必須啓用廣播在manifest.xml文件:

<receiver android:enabled="true" android:name=". ConnectivityChangedReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.AIRPLANE_MODE"/> 
    </intent-filter> 
</receiver> 
+0

沒有工作。一個其他廣播,但它仍然不會工作 –

1

試試這個樣子,試着加入,Android的:出口= 「真」:

//添加此許可太

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


<receiver android:enabled="true" android:name=".ConnectivityChangedReceiver" 
android:exported="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.ACTION_AIRPLANE_MODE_CHANGED"/> 
     </intent-filter> 
    </receiver> 

The Real state is determined like this: 

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

     boolean isAirplaneModeOn = intent.getBooleanExtra("state", false); 
     if(isAirplaneModeOn){ 

      // handle Airplane Mode on 
     } else { 
      // handle Airplane Mode off 
     } 
    } 
+0

不行。嘗試與另一個廣播,<動作android:name =「android.intent.action.HEADSET_PLUG」/>但它仍然不會工作:-( –

+0

嗨@羅伊。我補充說,但我仍然沒有得到任何迴應。我應該添加任何東西到MainActivity?還有什麼可能是錯的?:-( –

+0

嘗試用這個新的動作@Mos –

0

廣播接收機的官方文件說:

android:exported 

廣播接收器是否可以接收來自其應用程序之外來源的消息 - 如果可以則爲「真」,否則爲「假」。如果是「假」,則廣播接收機可以接收的唯一消息是那些由具有相同用戶ID的相同應用程序或應用程序的組件發送的消息。