2016-07-04 11 views
0

私は、画面がオフの場合、放送受信機からすべての私のアプリケーションの活動を終了したい: まず、私は以下のように私の活動の静的参照を作成しました:[通話からである完了のすべての活動

public class MainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 



public static AppCompatActivity ma; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    //set instance of ma equals to MainActivity 
    ma=this; 


    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 

    }); 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 
} 

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 

    } 
} 

@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; 
} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
public void displayView(int viewId) { 

    Fragment fragment = null; 
    String title = getString(R.string.app_name); 

    switch (viewId) { 
     case R.id.monthly_figures: 
      fragment = new dailysales(); 
      title = "Daily Figures"; 

      break; 
     case R.id.nav_gallery: 
      fragment=new monthlysales(); 
      title="Monthly Figures"; 
      break; 


    } 

    if (fragment != null) { 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.replace(R.id.content_frame, fragment); 
     ft.commit(); 
    } 

    // set the toolbar title 
    if (getSupportActionBar() != null) { 
     getSupportActionBar().setTitle(title); 
    } 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 

} 

私のBroadCastreceiver Classは以下のようになります:

public class SCBroadcaster extends BroadcastReceiver { 
    public void onReceive(Context context, Intent intent) { 
    if(intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){ 
    MainActivity.ma.finish(); 
    } 
    } 
} 

あなたは他にも良い方法があると思いませんか? System.Exit(0)またはprocess.killprocess(myPid)を呼び出そうとしましたが、画面がオンになっているときにアプリケーション全体が再起動されます。おかげさまで

+0

'MainActivity'全体を投稿できますか? – user3793589

+0

私は、System.Exit(0)を使用すると、アプリケーションにとって良い動作ではないと思う:)。どのような目的のために活動を終了したいですか? – comrade

+0

アプリケーションをすべての方法で閉じなければならないという目的。たとえユーザーがすべての画面を閉じるときに忘れていても(電話を離れるときに)忘れてしまったとしても。 – Albert

答えて

1

Androidはこれでうまくセットアップされていません。フレームワークのアイデアは、アプリケーションを決して閉じず、常に同じ場所に再び開くことができないということです。私はそれが悪い考えだと思う(いくつかのアプリは、セキュリティ上の理由からタイムアウト後に閉じる必要がある)が、それはうまくいく。

私はそれらを嫌う限り、私はイベントバスがここに行く正しい方法だと思います。 onCreateでイベントバスイベントのすべてのアクティビティを登録します。 Receiverが画面をオフにしたとき(または他のトリガーがあれば)、イベントを送信させます。 Activityがそのイベントを受け取ったら、finish()を呼び出させます。作業を簡単にするために、この動作を基本アクティビティクラスにコーディングし、すべてのアクティビティをアクティビティの代わりにそのクラスから直接派生させます。

関連する問題