Android弹出消息

时间:2017-02-05 15:11:51

标签: android android-alertdialog

我创建了检测otg电缆的应用程序,当插入或拔出otg电缆时,弹出的消息显示otg已连接或otg已断开。如果单击工具栏上的按钮时出现该弹出窗口,则弹出消息应仅出现在当没有连接otg电缆时,操作栏,当它连接时它应该被隐藏吗?

public class MainActivity extends AppCompatActivity
{
    private Process suProcess;

    public static final String IS_CONNECTED_KEY = "isConnectedValue";

    public void startOtgService()
    {
        startService(new Intent(MainActivity.this, OtgService.class));

    }

    public void stopOtgService()
    {
        stopService(new Intent(MainActivity.this, OtgService.class));

    }

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

        button = (Button) findViewById(R.id.button_autootg);
        button.setTag(0);
        button.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                button.setText("");
                final int status = (Integer) view.getTag();
                switch (status)
                {
                    case 0:
                        startOtgService();
                        button.setText("OTG Service Enabled");
                        button.setBackgroundColor(Color.GREEN);
                        view.setTag(1);
                        break;
                    case 1:
                        stopOtgService();
                        button.setText("OTG Service Disabled");
                        button.setBackgroundColor(Color.RED);
                        view.setTag(0);
                        break;
                }
            }
        });

    }

    private void getRoot()
    {
        try
        {
            suProcess = Runtime.getRuntime().exec("su");
        }
        catch (IOException e)
        {

        }
    }

    @Override
    protected void onNewIntent(Intent intent)
    {
        if (intent.getExtras() == null)
        {
            super.onNewIntent(intent);
            Log.e("###", "No extras");
            return;
        }

        if (intent.hasExtra(IS_CONNECTED_KEY))
        {
            Log.e("###", "Displaying dialog");

            boolean isConnected = intent.getExtras().getBoolean(IS_CONNECTED_KEY);

            final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
            alertDialog.setTitle("Otg state changed");

            if (isConnected)
                alertDialog.setMessage("OTG connected");
            else
                alertDialog.setMessage("OTG disconnected");

            alertDialog.show();
        }
        else
        {
            Log.e("###", "Does not contain key");
            super.onNewIntent(intent);
        }
    }
@Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        getMenuInflater().inflate(R.menu.menu_main, menu);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        int id = item.getItemId();

        if (id == R.id.action_settings)
        {
            return true;
        }
        if(id ==  R.id.action_cable)
        {

        }
        return super.onOptionsItemSelected(item);
    }
}



public class OtgService extends Service
{

    private boolean mOtgConnected = false;
    private Handler mHandler;

    Timer taskTimer = new Timer();

    TimerTask task = new TimerTask()
    {
        private int last_Length = -1;

        @Override
        public void run()
        {
            Context context = OtgService.this.getBaseContext();

            File directory = new File("/sys/bus/usb/devices");
            File[] contents = directory.listFiles();

            int conn_length = contents.length;

            if(conn_length ==last_Length)
            {
                return;
            }
            else
            {
                last_Length = conn_length;
            }

            if(conn_length == 0)
            {
                mOtgConnected = false;
                mHandler.post(flagChangedTask);
            }
            else if (conn_length > 0)  //Might get a -1
            {
                mOtgConnected = true;
                mHandler.post(flagChangedTask);

            }

            if(conn_length == 0)
            {
                displayDialog(false);
            }
            else if (conn_length > 0)  //Might get a -1
            {
                displayDialog(true);
            }

        }
    };

    //Will post this to the main thread
    Runnable flagChangedTask = new Runnable()
    {
        @Override
        public void run()
        {
            if (mOtgConnected)
                Toast.makeText(OtgService.this,"otg connected",Toast.LENGTH_SHORT).show();
            else
                Toast.makeText(OtgService.this,"otg not connected",Toast.LENGTH_SHORT).show();
        }
    };


    public OtgService()
    {

    }

    public void displayDialog(boolean isConnected)
    {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        intent.putExtra(MainActivity.IS_CONNECTED_KEY, isConnected);

        startActivity(intent);
    }

    private void onStartCompat(Intent intent)
    {
        Log.e("###", "Starting service!");

        if (mHandler == null)
            mHandler = new Handler(getMainLooper());

        taskTimer.scheduleAtFixedRate(task, 0, 1000);
    }

    // This is the old onStart method that will be called on the pre-2.0
    // platform.  On 2.0 or later we override onStartCommand() so this
    // method will not be called.
    @Override
    public void onStart(Intent intent, int startId)
    {
        onStartCompat(intent);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        onStartCompat(intent);
        // We want this service to continue running until it is explicitly
        // stopped, so return sticky.
        return START_STICKY;
    }

    @Override
    public void onDestroy()
    {
        //task.cancel();
    }


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

1 个答案:

答案 0 :(得分:0)

在代码中添加以下代码。当电缆状态改变时,请致电public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.CatalogueHolder> { private Context context; private List<ProductList> list; public ProductAdapter(Context context, List<ProductList> list) { this.context = context; this.list = list; } @Override public CatalogueHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_product, parent, false); CatalogueHolder catalogueHolder = new CatalogueHolder(itemView); return catalogueHolder; } @Override public void onBindViewHolder(CatalogueHolder holder, int position) { final ProductList item = list.get(position); holder.itemView.setTag(item); holder.productName.setText(item.getName()); } @Override public int getItemCount() { return list != null ? list.size() : 0; } public static class CatalogueHolder extends RecyclerView.ViewHolder { @Bind(R.id.productname) TextView productName; @Bind(R.id.typeProduct) TextView typeProduct; @Bind(R.id.price) TextView price; @Bind(R.id.date) TextView date; public CatalogueHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); } } } 。这将显示工具栏中的弹出按钮。单击该按钮时,将显示一个弹出窗口,该按钮消失。您可以根据所需的电缆状态更改弹出标题和消息。

cableStateWasChanged(boolean isConnected)

另外,我建议您使用Handler而不是TimerTask,请参阅this post