Usagestats? проблема после того, как я загрузил свой apk - PullRequest
0 голосов
/ 06 сентября 2018

Мое приложение может отслеживать, сколько времени люди потратили на свое приложение, и оно отлично работает, когда я работаю на своем телефоне. Но после того, как я сгенерировал подписанный apk и изменил несколько названий папок и gradle, я успешно загрузил его. Это не работает, когда я загрузил его снова! Проблема в том, что получается только 10 данных, кроме того, данные не точны, когда я тестирую их. Я думаю, что проблема может быть в каталогах, но я создаю новый проект, и перепечатываю все, но проблема остается той же. Вот сообщение, которое может помочь:

09-05 15:42:29.618 17735-17735/my.awesome.tony.usagetrack0819 W/System.err: android.content.pm.PackageManager$NameNotFoundException: app.awesome.my.anti_addiciton
at android.app.ApplicationPackageManager.getApplicationInfoAsUser(ApplicationPackageManager.java:506)
at android.app.ApplicationPackageManager.getApplicationInfo(ApplicationPackageManager.java:488)
package my.awesome.tony.usagetrack0819; 

это мой код:

import android.app.AppOpsManager;
import android.app.usage.UsageStats;
import android.app.usage.UsageStatsManager;
import android.content.Context;
import android.content.Intent;

import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.icu.util.Calendar;
import android.provider.Settings;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.tony.usagetrack0819.R;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    long begintime;
    long endtime;
    ListView listView;

    Integer TotalForeground = 0;
    //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    TextView textView;
    //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>



    public void getUsageStatsList() throws PackageManager.NameNotFoundException {

//        if (ContextCompat.checkSelfPermission(this, Manifest.permission.PACKAGE_USAGE_STATS)
//                != PackageManager.PERMISSION_GRANTED) {
//            Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
//            startActivity(intent);

//
//        } else {
            Log.i("Chloe", "getUsageStatsList()!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

            Calendar c1 = Calendar.getInstance();
            c1.set(Calendar.HOUR_OF_DAY, 0);
            c1.set(Calendar.MINUTE, 0);
            c1.set(Calendar.SECOND, 0);
            Calendar c2 = Calendar.getInstance();
            begintime = c1.getTimeInMillis();
            endtime = c2.getTimeInMillis();
        Log.i("Chloe", "usm!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

            UsageStatsManager usm = (UsageStatsManager) getSystemService(USAGE_STATS_SERVICE);
            assert usm != null;
            PackageManager packageManager = getApplicationContext().getPackageManager();
            ApplicationInfo ai;

            List<UsageStats> usageStatsList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, begintime, endtime);

            ArrayList<String> listViewContent = new ArrayList<String>();

//        Log.i("Chloe", "before if(usageStatsList!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");


            if (usageStatsList != null && !usageStatsList.isEmpty()) {
//                Log.i("Chloe", "before for(UsageStats usageStats : usageStatsList)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

                for (UsageStats usageStats : usageStatsList) {
//                    Log.i("Chloe", "Right after for(UsageStats usageStats : usageStatsList)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

                    long totalTimeInForeground = usageStats.getTotalTimeInForeground();
                    Integer i = (int) (long) totalTimeInForeground;
                    i = i / 60000;

                    if (i != 0) {
                        //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                                                TotalForeground =TotalForeground + i;
                        //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                        String TimeInForegroundString = Integer.toString(i);
                        ai = packageManager.getApplicationInfo(usageStats.getPackageName(), 0);

                        String applicationName = (String) (ai != null ? packageManager.getApplicationLabel(ai) : "Unknown");

//                    Drawable d = getPackageManager().getApplicationIcon(ai);

                        String content = applicationName + "                                                                                           " + i + " minutes";

                        listViewContent.add(content);
                        Log.i("Chloe", content);
                        Log.i("Chloe", Integer.toString(TotalForeground));

                    }
                    ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listViewContent);

                    Log.i("TTTTTT", Integer.toString(TotalForeground));

                    listView.setAdapter(listAdapter);
                    textView.setText( "Total time you spent on your phone!!                                                      "+ Integer.toString(TotalForeground) +" mins");

                }
                //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//                ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listViewContent);
//                listView.setAdapter(listAdapter);
                Log.i("Chloe", "The for loop end");
            }
        Log.i("Chloe", "end of getUsageStatsList");
//        }
    }


        private boolean checkUsagePermission() {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
            AppOpsManager appOps = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
            int mode = 0;
            mode = appOps.checkOpNoThrow("android:get_usage_stats", android.os.Process.myUid(), getPackageName());
            boolean granted = mode == AppOpsManager.MODE_ALLOWED;
            if (!granted) {
                AlertDialog dialog = new AlertDialog.Builder(this)
                        .setMessage("請開啟該程序*使用量資料存取* 並重啟該程序 Please turn on Usage Data Acess in settings and reopen the app ").create();
                dialog.show();
                Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
                startActivityForResult(intent, 1);
                return false;
            }
        }
        return true;
    }
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1) {
            AppOpsManager appOps = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
            int mode = 0;
            mode = appOps.checkOpNoThrow("android:get_usage_stats", android.os.Process.myUid(), getPackageName());
            boolean granted = mode == AppOpsManager.MODE_ALLOWED;
            if (!granted) {
                Toast.makeText(this, "请开启该权限", Toast.LENGTH_SHORT).show();
            }
        }
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        textView = findViewById(R.id.textView);
        //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


//        if(ContextCompat.checkSelfPermission(this, Manifest.permission.PACKAGE_USAGE_STATS)!= PackageManager.PERMISSION_GRANTED)
//        {
//        Intent intent = new Intent (Settings.ACTION_USAGE_ACCESS_SETTINGS);
//        startActivity(intent);
//        }
        Log.i("Tony","ON CREATEEEEEE!!!!!");
        listView = findViewById(R.id.listView);
        try {
            getUsageStatsList();
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        checkUsagePermission();
    }
}

Кстати, приложение называется Easy Tracker, вы можете искать по моему имени "tonymimi", что будет намного проще.

...