在这段代码中:
1.public class MyReceiver extends BroadcastReceiver 2. public class MainActivity extends Activity
当我的应用程序启动时,我按下主页按钮并将其最小化!之后,MyRecevier 正在计算 LOGCAT 中可见的电源按钮计数,但随后 MyReceiver 无法启动(在屏幕上可见)最小化 Activity ,即 MAINACTIVITY 或任何其他新 Activity 。
附言我想在某些点击后启动一个 Activity 。
MyReceiver.java
public class MyReceiver extends BroadcastReceiver{
final static String TAG = "customTAG";
static int countPowerOff=0;
private Activity activity=null;
public MyReceiver (Activity activity)
{
this.activity=activity;
}
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "Power button is pressed.");
Log.d(TAG, "Power button count is " +countPowerOff);
Toast.makeText(context, "power button clicked", Toast.LENGTH_SHORT).show();
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF))
{
countPowerOff++;
Log.d(TAG, "Action OFF!! Power count increased .");
Log.d(TAG, "Power button count is " +countPowerOff);
}
else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON))
{
Log.d(TAG, "ACTION SCREEN ON");
Log.d(TAG, "Power button count is " +countPowerOff);
if(countPowerOff>2)
{
Log.d(TAG, "Power button count is " +countPowerOff);
Log.d(TAG, "Count is greater than 2 now it should start ");
countPowerOff=0;
Toast.makeText(context, "MAIN ACTIVITY IS BEING CALLED ", Toast.LENGTH_LONG).show();
Intent i = new Intent(activity,MainActivity.class);
//I have tired different flags!!
//below lines are not making any effect unable to popup MainActivity
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
activity.startActivity(i);
context.startService(i);
}
}
}}
MainActivity.java
public class MainActivity extends Activity {
static int a = 0;
MyReceiver mReceiver;
final static String TAG = "customTAG";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
mReceiver = new MyReceiver (this);
registerReceiver(mReceiver, filter);
a++;
Log.d(TAG, "onCreate Event count : " +a);
}
public void onNewIntent()
{
Log.d(TAG, "onNewIntent started !!");
}
public void onStart()
{
super.onStart();
Log.d(TAG, "onStart event Occured !!");
}
public void onResume()
{
super.onResume();
Log.d(TAG, "onResume event occured !!");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}}
AndroidManifest.xml
<application>
..
..
..
..
<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_SCREEN_ON"></action>
<action android:name="android.intent.action.ACTION_SCREEN_OFF"></action>
</intent-filter>
</receiver>
</application>
最佳答案
MyReceiver.java
public class MyReceiver extends BroadcastReceiver
{
private static int countPowerOff = 0;
public MyReceiver ()
{
}
@Override
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF))
{
Log.e("In on receive", "In Method: ACTION_SCREEN_OFF");
countPowerOff++;
}
else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON))
{
Log.e("In on receive", "In Method: ACTION_SCREEN_ON");
}
else if(intent.getAction().equals(Intent.ACTION_USER_PRESENT))
{
Log.e("In on receive", "In Method: ACTION_USER_PRESENT");
if (countPowerOff > 2)
{
countPowerOff=0;
Toast.makeText(context, "MAIN ACTIVITY IS BEING CALLED ", Toast.LENGTH_LONG).show();
Intent i = new Intent(context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(i);
}
}
}
}
MainActivity.java
public class MainActivity extends Activity
{
private MyReceiver myReceiver;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_USER_PRESENT);
myReceiver = new MyReceiver();
registerReceiver(myReceiver, filter);
}
@Override
protected void onDestroy()
{
if (myReceiver != null)
{
unregisterReceiver(myReceiver);
myReceiver = null;
}
super.onDestroy();
}
}
如果您已经在 Activity 中注册接收器,则无需在 list 中注册接收器。
此外,最好从 ACTION_USER_PRESENT
开始您的 Activity ,因为这意味着设备在按下电源按钮锁定后已解锁。但是,如果您想从 ACTION_SCREEN_ON
启动 Activity,您也可以这样做,这也可以,但只有在用户解锁设备后 Activity 才会可见。
此代码有效。
关于android - BroadCast Receiver 正在计算电源按钮的点击次数,但无法恢复最小化的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19761900/