2017-05-06 6 views
-5

Le but de l'application est de montrer une vue sur l'écran d'accueil lorsque l'alimentation se connecter ou se déconnecter quel que soit l'état de fonctionnement de l'application. Il devrait afficher la vue sur l'écran d'accueil même si l'application n'est pas en cours d'exécution. PROBLÈME: 1: Aucun écran contextuel ne s'affiche lorsque l'application est proche.Le récepteur de diffusion ne fonctionne pas lorsque l'application est fermée. Il fonctionne parfaitement lorsque l'application est en cours d'exécution

Remarque: Il affiche un écran contextuel lorsque l'application est en cours d'exécution.

Appareil: Lollipop

mode: mode développeur

Ici, je joins le code. La classe d'activité principale est la suivante. Il s'ouvre au démarrage de l'application.

public class MainActivity extends AppCompatActivity { 

private static final int REQUEST_CODE_SOME_FEATURES_PERMISSIONS = 101; 
static WindowManager.LayoutParams params; 
static WindowManager wm; 
static ViewGroup lockScreen; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Bundle bundle = getIntent().getExtras(); 
    try { 
     String from = bundle.getString("from"); 
     if (from.equalsIgnoreCase("broadcast")) { 
      startActivity(new Intent(getApplicationContext(), BatteryAdActivity.class)); 
      finish(); 

     } 
    } catch (Exception ex) { 

    } 

    getPermission(); 


} 

private void getPermission() { 
    String[] PERMISSIONS = {Manifest.permission.BATTERY_STATS, Manifest.permission.SYSTEM_ALERT_WINDOW, Manifest.permission.REORDER_TASKS}; 
    if (!hasPermissions(this, PERMISSIONS)) { 
     ActivityCompat.requestPermissions(this, PERMISSIONS, REQUEST_CODE_SOME_FEATURES_PERMISSIONS); 
    } 
} 

public static boolean hasPermissions(Context context, String... permissions) { 
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) { 
     for (String permission : permissions) { 
      if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { 
       return false; 
      } 
     } 
    } 
    return true; 
} 

}

2: La classe de récepteur est BroadCast comme ci-dessous.

public class PowerConnectionReceiver extends BroadcastReceiver { 
Context context; 

@Override 
public void onReceive(Context context, Intent intent) { 
    this.context = context; 
    PackageManager pm = context.getPackageManager(); 
    Intent launchIntent = pm.getLaunchIntentForPackage("com.dogpo.batteryoptimize"); 
    launchIntent.putExtra("from", "broadcast"); 
    context.startActivity(launchIntent); 

    showMessage("charging"); 

} 

private void showMessage(String charging) { 
    Toast.makeText(context, charging, Toast.LENGTH_SHORT).show(); 
} 

}

3: L'activité qui ouvre la déconnexion d'alimentation ou se connecter est comme ci-dessous.

public class BatteryAdActivity extends AppCompatActivity { 

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

}

4: Le code est Manifest comme ci-dessous.

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

<uses-permission android:name="android.permission.BATTERY_STATS" /> 
<uses-permission android:name="android.permission.REORDER_TASKS" /> 
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 

<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=".PowerConnectionReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.ACTION_POWER_CONNECTED" /> 
      <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" /> 
     </intent-filter> 
    </receiver> 

    <activity android:name=".BatteryAdActivity" 
     ></activity> 
</application> 

+0

Vous avez besoin d'être plus précis: quel réseau publicitaire par exemple –

+0

@IshaanKumar Le but de l'application pour afficher les informations de la batterie avec des annonces Google dans l'écran de verrouillage comme l'image i attaché à ma question initiale . Je veux savoir comment y parvenir dans la plate-forme Android. (J'ai besoin d'étapes, en particulier l'écran contextuel sur lockscreen). Vous pouvez trouver mon code source sur https://github.com/tenzinzero1/Testing. – Tashidev

+0

Faites-le en XML. quel est le problème? –

Répondre

-1

Déclarer une mise en page relative vierge de la taille définie où vous voulez montrer l'annonce. Maintenant:

RelativeLayout rl= (RelativeLayout) 
findViewById(R.id.ad_container); /*ad_container is the id of the RelativeLayout defined in XML*/ 
AdView mAdView = new AdView(this); 
mAdView.setAdUnitId(/*Banner Id*/); 
mAdView.setAdSize(AdSize.BANNER); 
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
rl.addView(mAdView,params); 
+0

Atleast commenter pourquoi vous avez déprécié. –